|
Prev: looking for design patterns of interacting state machine
Next: Passing a lot of parameters in constructor?
From: arnuld on 23 Feb 2007 12:29 > On Feb 21, 9:10 am, Jerry Coffin <jcof...(a)taeus.com> wrote: > In article <1171984613.342790.314...(a)v45g2000cwv.googlegroups.com>, > geek.arn...(a)gmail.com says... > > > > Lisp is not exactly the most common starting place. > > > i know and it does not mean that it should not be. heard of SCHEME ? > > No, but I've heard of (and used) Scheme. The name "Scheme" is not an > acronym, so there's no need for full caps -- IIRC, it's actually derived > from "Schemer". > [..SNIP...] > There is a wide range of choices as to how to approach programming. Mr. > Malik's advice is basically at one extreme: to go with the latest fad, > and plan to learn new languages as they become the latest fad. This is a > reasonable route for a lot of people. The latest fad makes great resume > filler and nearly guarantees that you'll be able to find a job, even if > (in all honesty) you're not really a particularly great programmer. > Chances are that you won't get really great jobs, but you never know -- > sometimes you might. You'll have moved on to two new languages and three > new jobs before your employer figures out that you really weren't very > good. > > My advice tends toward the opposite extreme: think hard about what you > really _want_ to do. As Mr. Malik implied, there's not really a > tremendous difference between one language and another -- but there IS a > tremendous difference between one programmer and another. Learning the > latest and greatest language really won't suddenly make you a lot > smarter or more productive or in any other way a drastically better > programmer. Learning to use a language really _well_, however, really > will make you considerably more productive. > [....SNIP....] > As far as C++, specifically, goes: it continues to be used, and if you > learn it well, you'll almost certainly be able to feed your children. > While there are certainly situations where C++ is far from ideal and > Java or C# is better, there are also situations where C++ excels, and > neither Java nor C# is particularly competitive. I haven't seen you post > enough about your aims to give anybody a basis for an honest > recommendation of one over another. > > -- > Later, > Jerry. > > The universe is a figment of its own imagination. Jerry, thanks a lot for your precious time. there is a tremendous improvement over my thoughts and i think i have gone into right direction. your words speak of "programming experience" and i have accumulated your experience into my work. i never thought that a simple advice to one of my friends, "pandit" - the OP, will improve my existing programming base to such a larger extent. thanks again -- arnuld http://arnuld.blogspot.com
From: Nick Malik [Microsoft] on 26 Feb 2007 04:40 "arnuld" <geek.arnuld(a)gmail.com> wrote in message news:1171984613.342790.314680(a)v45g2000cwv.googlegroups.com... >> Lisp is not exactly the most common starting place. > > i know and it does not mean that it should not be. heard of SCHEME ? I'm not going to argue if it was good or bad to start with Lisp. Just different. Cool even. I like Lisp. One of my favorite T-shirts was: My CAR ran over my CDR > >> It is not procedural, >> and most of the 'problems' that can be solved with OO 'solutions' are >> problems that are most typically seen in procedural approaches to >> problems: >> to whit: functional decomposition. Therefore, to move to an OO solution, >> you are going to have to learn something procedural. It is a >> prerequisite. > > i did not get it There are assumptions that form the foundations of understanding. It is how knowledge is constructed. All knowledge, all philosophy, is based, at some point, on assumptions. One set of assumptions that we make is the representation of logic, another is the representation of information, and another is the process by which problems will be solved. The last is often the most fundamental, in that it drives much of the grammatical construction of the language itself. The Lisp language assumes many things about the programmer, including an inherent understanding of how to construct problems in the form of lists, how to analyse data as lists, and how to express solutions contrived from lists, including the list of programming instructions themselves. The more typical von-neumann architecture seperates data from instructions and assumes an approach not dissimilar to the ones originally described by Aristotle. This approach is the one we now refer to as functional decomposition and forms the cornerstone of procedural software development. It is not the cornerstone of functional programming or logic programming. The language is an expression of the assumptions on which it is based. Languages, inasmuch as they express thought, also mold it. It is far easier to describe some problems in a particular language. The SQL statement "SELECT row_id, type_code, type_name FROM tblTransactionType where type_code = 'DBT'" is easy to express in SQL but would require quite a few more lines of code to describe well in a procedural language if the data were stored in a flat file. In the same sense that some concepts are best explained in one language than another, it is true that practitioners of a language will more quickly learn to express elegant ideas that the language is suited for. In other words, not only does the language affect the length of the expression, it also affects the practitioner. That is why it is imperative that new developers learn multiple languages, and nearly every college teaching computing science endeavors to insure it. If your start is in Lisp, cudos. However, the problems faced by procedural developers are solved, at least partially, by OO languages. Therefore, to truly understand these solutions, and understand how they are elegant solutions to a particular set of problems, you need to understand the problems. You need to understand the procedural paradigm. You cannot skip it. > > >> > OOA-D -> OOP using Eiffel/Ruby -> C++ >> >> > ? >> >> I'm a little biased on this point. I think you dump C++ completely. Go >> to >> C# (oh, OK, you could go to Java too ;-). > > i guessed it earlier. NO, i am really tankful for you read my post > and C# comes from house of Microsoft, best known for producing 3rd > class software. With all due respect, I beg to differ. Of course, you expected me to say that. :-) > i can guess he (Bill Gates) must have ordered his > employees to create a technically disgusting beast out of C and C++ No, actually, Microsoft hired the best and brightest minds from industry and they produced a language that is remarkably similar to Java and is heavily influenced by the lessons learned by both Java and Delphi. I doubt that Bill directed that strategy, although I'm certain he was aware of it and approved of it. Not much is done in MSFT without him being aware of it. If you had actually taken the time to write code in C# and then compared it to Java, as millions of others have, I'd be interested in your comments about the relative elegance of the languages. As it is, I can only chalk up your comment to prejudice. It's a shame. There are some very honest, intelligent, curious, and imaginative men and women working at Microsoft. Please don't insult them. I know many of them. They do not deserve your vitriole. If you believe that C# is somehow disgusting, I urge you to actually do some research from independent researchers to find out what languages are more elegant, performant, or maintainable. Perhaps you can start here: http://www.gotdotnet.com/team/compare/ > > remember i am not speaking against your advice, HECK i don even know > why you have named your self "Nick Malik [Microsoft] " rather than > "Nick Malik" Because my employer asks me to be honest about my viewpoint. They do not require it, nor could they regulate it. But they do ask. Just as a reputable news organization will always reveal when they are reporting about an organization that sponsors them, I consider it important that the people who read my messages understand that I have a viewpoint that is colored by my experience and the information to which I am exposed. I am being honest with you. That said, of my 25 years in software, only five has been spent working at Microsoft. My viewpoint is enriched by working at Microsoft, but is not limited to one company or technology. I've spent many years writing code in Unix as well as OS/2. Even some time in embedded firmware. > >> I'm sure there are a lot of jobs >> in other languages, but the last time I checked, the most common >> languages >> for hiring new developers into the field were in established places like >> C# >> and Java. (Learning either will help with the other... double your >> chances... learn both). > > when you searched for last time? and where ? what keywords you use ? > Monster.com, Dice.com ... there are dozens of sites. Salary survey on dice is useful http://career-resources.dice.com/tech_salary_survey_06.shtml Searching on Dice, I did a look up for Object Oriented (5891 hits). I wrote down some of the technologies that I ran across, added a few that came to mind, including some of the smaller ones for context (like LISP), and then searched independently for them. Here's a table of resulting hits. sql - 23650 java - 15870 c++ - 7960 c# - 6496 perl - 5241 VB - 2655 COBOL - 1283 python - 955 TCL - 391 Cold Fusion - 355 ruby - 350 Forth - 139 Smalltalk - 62 Prolog - 37 lisp - 35 PL/1 - 18 Clearly, from this list, JAVA is far and away the most popular object oriented language in terms of open positions or current hiring. C++ is second, and C# is close behind. C++, C#, and VB (the three primary languages of the .Net platform) are roughly equal to the Java number. So, I'd say they are comparable in some ways. Clearly, this data would require a lot more analysis to be truly useful, but from the quick hit I did, I think it is fair to say that the best bet, if you want to write in OO, is to learn Java or one of the .Net languages (C++, C#, or VB). If you don't have a love affair with OO, then SQL is clearly a good bet as well. > > i am searching right now for jobs in India with Keywords C++ and Java. > majority of jobs are for programmers carrying either: C++ or Java (in > both cases, along with OOA-D and who can comprehend at least half of > DPs) > > i see C# & .NET programmers belong to just 20% of the jobs here. e.g > try "monsterindia.com". Go with what works. Given that no one is investing much effort in new developments for C++, all those C++ jobs may very well be maintainece positions. If that's what you want, go for it. -- --- Nick Malik [Microsoft] MCSD, CFPS, Certified Scrummaster http://blogs.msdn.com/nickmalik Disclaimer: Opinions expressed in this forum are my own, and not representative of my employer. I do not answer questions on behalf of my employer. I'm just a programmer helping programmers. --
From: Nick Malik [Microsoft] on 26 Feb 2007 05:04 "Jerry Coffin" <jcoffin(a)taeus.com> wrote in message news:MPG.204573ff1ee0aa37989851(a)news.sunsite.dk... > In article <1171984613.342790.314680(a)v45g2000cwv.googlegroups.com>, > geek.arnuld(a)gmail.com says... > > In fairness to MS, while I'm not particularly impressed with their > business practices, _some_ of their software is actually pretty good. As > far as C# goes, at least from my perspective, it looks much closer to > Java than either C or C++. > > As languages go, from a theoretical viewpoint, it's not a bad language; > in fact, quite a substantial improvement over Java. OTOH, from a > practical viewpoint, it's slow, mostly non-portable, and aimed almost > exclusively at a fairly narrow range of applications. Interesting. This study found that the .Net platform whipped the dickens out of the Java platform in a scalable multiprocessor application server environment. I guess it's only slow when Java developers write C# code... http://www.gotdotnet.com/team/compare/nileperf.aspx > > It seems to me that Mr. Malik has used excellent reasoning to reach > exactly the opposite of the correct conslusion. No, neither you, your > programming, nor your career should be defined by a language. In fact, > languages are of only limited consequence in programming. While there > are specialized languages that offer considerable advantages in specific > areas, most of programming is about figuring out how to solve problems > well, and quite a few languages are entirely sufficient for expressing > good solutions quite nicely. > > There is a wide range of choices as to how to approach programming. Mr. > Malik's advice is basically at one extreme: to go with the latest fad, > and plan to learn new languages as they become the latest fad. Interesting interpretation of my words. Not sure where you got that. The OP clearly asked about the OO language direction he should take. Was it wrong to suggest Java (a 10+ year old, very well established language and platform for multiple OS targets) or .Net (a slightly newer platform with multiple languages for one one OS)? When I said "Once you are in the field and working for a few years, find your 'up and coming' language and move." I meant that the OP shouldn't choose a language that he cannot work in, hoping to get a first job. He should choose a good language that he can get started in, and then, once working, if he wishes to move, he can find HIS "preferred" language. In other words, take a good choice, get started, and then, if you want to follow a more passionate or more pure direction, do so with some experience under his belt. > > My advice tends toward the opposite extreme: think hard about what you > really _want_ to do. Completely reasonable advice. However, when starting out, it is unlikely that you will *get* to do what you *want* to do. It is good to have a goal, but it is also good to work for a living and learn about your craft. > As Mr. Malik implied, there's not really a > tremendous difference between one language and another -- but there IS a > tremendous difference between one programmer and another. Agreed. > Learning the > latest and greatest language really won't suddenly make you a lot > smarter or more productive or in any other way a drastically better > programmer. Learning to use a language really _well_, however, really > will make you considerably more productive. Agreed. > Your choices should be based on a few factors. First and foremost, how > good of a programmer do you really think you can become? This is an utterly foolish question to ask a novice developer. With no basis to make this decision, the answer can come only from self esteem, which is a lousy indicator eventual productivity. I've seen truly cocky developers screw up massively, and truly humble developers write thousands of lines of fast, elegant, bug-free code. Neither could have answered that question before writing the code, doing the work, and discovering their strengths and weaknesses under pressure. >Programmers > seem to fit the bell curve fairly well -- most of them are pretty close > to average, and about half are below average. If you fall into that > category, chances are that (especially from a career viewpoint) you're > better off taking Mr. Malik's advice -- despite involving moving from > job to job semi-regularly, it really is a fairly safe route. Moving with > a large pack makes it easier to cover for mediocrity (and the fact that > the language is new means that virtually nobody can really even ask that > anybody really use it well). You really didn't understand my advice, did you? to be fair, perhaps I could have been more clear, and I hope to be more clear in the future. I do not recommend 'language hopping.' Passion for your work matters. If you want to work, work. But if you want to truly Love your work, you will need to go after the kind of work you want to do. I believe we agree on this point. However, I don't believe you can make that call from the outside looking in. I think you need to take a job in a good language, get your grounding, and THEN look around. If language is your passion, find the language you can love and go there. If an application area is your passion, or project management, or testing, go there... But don't try to decide from the outside. It's an absurd proposition. -- --- Nick Malik [Microsoft] MCSD, CFPS, Certified Scrummaster http://blogs.msdn.com/nickmalik Disclaimer: Opinions expressed in this forum are my own, and not representative of my employer. I do not answer questions on behalf of my employer. I'm just a programmer helping programmers. --
From: Nick Malik [Microsoft] on 26 Feb 2007 05:13 "Jerry Coffin" <jcoffin(a)taeus.com> wrote in message news:MPG.20482a19d6cc9c3b989863(a)news.sunsite.dk... > In article <1172039763.430072.84580(a)v33g2000cwv.googlegroups.com>, > geek.arnuld(a)gmail.com says... > >> you are saying, if i choose my OWN language and learn some programming >> paradigms with it then i do not need to care about this 20% and 1% job >> market >> >> ? > > More or less -- the trick is to get _really_ good at what you decide to > do. I ask you, Jerry, how our friend arnuld is supposed to become good at an obscure language without first getting a job in development that requires at least some exposure to software design and, ultimately, an opportunity to work in that language? <anecdote> When I was starting out, I knew a fellow who chose an obscure language to start with, and really stuck to his guns. You know what? After 10 years, he finally got the opportunity to work, in a paid position, writing in Forth. Fifteen years later, he's still writing in Forth. He hates it. </anecdote> > >> personally i like Lisp, Haskell and a bit inclined towards Mercury [1] >> and OCaml too [2]. i like C because, to me, it feels like an important >> part of Hacking. > > Well, I will say this: the closer you stay to the mainstream, the more > room there is for being average. Conversely, if you decide to specialize > in something obscure, you're going to have to be better at it to make > any money -- and the more obscure it is, better you need to be. and the harder it will be to get that first break. > In this case, it's more a matter of a question only you can really > answer -- early on, it's perfectly reasonable to do a lot of exploring > to find what you like and what you're good at. Once you've found that, > it's at least possible to decide to specialize more -- even if you don't > pick too narrow a specialty, you can work in reverse, avoiding things > you really don't like. Good to see you come around to my original advice. Perhaps you were more clear in reaching it... ? Hard for me to judge. I'm glad that both of us ended up in the same place. -- --- Nick Malik [Microsoft] MCSD, CFPS, Certified Scrummaster http://blogs.msdn.com/nickmalik Disclaimer: Opinions expressed in this forum are my own, and not representative of my employer. I do not answer questions on behalf of my employer. I'm just a programmer helping programmers. --
From: arnuld on 26 Feb 2007 09:34
> On Feb 26, 3:13 pm, "Nick Malik [Microsoft]" <nickma...(a)hotmail.nospam.com> wrote: > "Jerry Coffin" <jcof...(a)taeus.com> wrote in message > > news:MPG.20482a19d6cc9c3b989863(a)news.sunsite.dk... > > > In article <1172039763.430072.84...(a)v33g2000cwv.googlegroups.com>, > > geek.arn...(a)gmail.com says... > > >> you are saying, if i choose my OWN language and learn some programming > >> paradigms with it then i do not need to care about this 20% and 1% job > >> market > > >> ? > > > More or less -- the trick is to get _really_ good at what you decide to > > do. > > I ask you, Jerry, how our friend arnuld is supposed to become good at an > obscure language without first getting a job in development that requires at > least some exposure to software design and, ultimately, an opportunity to > work in that language? Jerry did not mean that. now, before i proceed further i need to tell you this: "a poster named "pandit" also posted a thread, nearly like this one i posted, but a little different, on "comp.lang.c" and when it became OT there, then on the advice of "comp.lang.c" folks, "pandit" (the OP) continued that thread on "comp.programming". [1] i also posted there and there are 3 men who helped me lot at these 3 places: Jerry, Flash Gordon and Hallvard." Of course others folks have also helped and these 3 persons hit the point directly. after reading all of these posts. i came to this conclusion: 1. i needed to think *HARD* on what i want to do. i decided to become a _good_ programmer 1st and then taking on a job route from there. so here i will choose language i like, that way i do not need continuous motivation as it is will be my favourite language [2]. the opposite route was not working. 2. i needed to think *HARD* on what kind of problems i like to solve and what i am good at actually. i need to compare the two and make a decision. 3. take the job route from here. (C++, OOA-D , DP, SW Engg. concepts) > <anecdote> > When I was starting out, I knew a fellow who chose an obscure language to > start with, and really stuck to his guns. You know what? After 10 years, > he finally got the opportunity to work, in a paid position, writing in > Forth. Fifteen years later, he's still writing in Forth. He hates it. > </anecdote> Jerry is quite technical man. He advised to learn a language well, _really_ well, and said 2 times that choosen language should not me extremely obscure (like you said Malik) > >> personally i like Lisp, Haskell and a bit inclined towards Mercury [1] > >> and OCaml too [2]. i like C because, to me, it feels like an important > >> part of Hacking. > > > Well, I will say this: the closer you stay to the mainstream, the more > > room there is for being average. Conversely, if you decide to specialize > > in something obscure, you're going to have to be better at it to make > > any money -- and the more obscure it is, better you need to be. > > and the harder it will be to get that first break. yes, you are right. > > In this case, it's more a matter of a question only you can really > > answer -- early on, it's perfectly reasonable to do a lot of exploring > > to find what you like and what you're good at. Once you've found that, > > it's at least possible to decide to specialize more -- even if you don't > > pick too narrow a specialty, you can work in reverse, avoiding things > > you really don't like. > > Good to see you come around to my original advice. Perhaps you were more > clear in reaching it... ? Hard for me to judge. I'm glad that both of us > ended up in the same place. yes, Jerry was much clear on his points, my post did mean that :-) [OT] BTW, "pandit" is my friend, he lives 100 KM away from my town, i taught him some Common Lisp ;-) [/OT] > --- Nick Malik [Microsoft] you did not tell me why you use that devil inside brackets. seems like you work with him. -- arnuld http://arnuld.blogspot.com [1] http://groups.google.com/group/comp.lang.c/browse_thread/thread/28b95f3aa171a9e2/4e174222fab111c0 http://groups.google.com/group/comp.programming/browse_thread/thread/b352d513c079f4ca/# [2] this step, to be true, will be a compromise between "what i love" and "what is the situation in job market", IFF i do not think of starting a business. :-) |