6 ms·
This is why Joel Spolsky correctly observed that the replacement of C/C++ and functional languages with Java in university CS curricula is a tragedy. If you don
by kyllo 14y ago
This is why Joel Spolsky correctly observed that the replacement of C/C++ and functional languages with Java in university CS curricula is a tragedy. If you don't understand pointers or recursion, you are not a polyglot and you cannot pick up just any language in a matter of weeks.
The "[language] programmer" (where [language] usually = Java or .NET) trend is a misguided attempt by industry to commoditize programmer talent.
- edwinnathaniel 14y agoI've seen C/C++ programmers failed in writing good readable code. C/C++ programmers tend to do premature optimization (habit) due to the culture and the problem domain (past experience): device driver, kernel code, game development. How important Pointer is for say learning any high-level programming language that don't have pointers (pretty much everything outside C/C++/Objective-C)? Sometimes I felt that knowing Pointer arithmetic and tricks are some sort of chess-thumping that old programmers tend to do. (My background is system programming so I know how pointer works). It doesn't matter what you know or learn during the university. What matters is whether you continue to hone your skill or not and have a high bar of quality.
- raphaelj 14y agoI think he was talking about pointer from the "idea" point of view, not the language feature. References in high level languages are mostly hidden pointers. A good knowledge of how pointers work is really important to get a good understanding of how high level languages work (a lot of Java programmers don't well understand the distinction between value and reference types, for instance). Likely, be at ease with recursion is also very important as many complex problems are recursive by nature, and so way easier to solve using functional techniques.
- kyllo 14y agoYes. Pointers are always there in programming and you need to understand how they work, even if you are using a language where you don't have to declare them as such explicitly.
- rosser 14y agohttps://en.wikipedia.org/wiki/Hasty_generalization https://en.wikipedia.org/wiki/Hasty_generalization
- tiwazz 14y agoI feel like this article on generalization could be a biography of my life based solely on the introductory paragraph, but I don't have enough time to finish reading it to be certain.
- Nursie 14y ago"Sometimes I felt that knowing Pointer arithmetic and tricks are some sort of chess-thumping that old programmers tend to do. (My background is system programming so I know how pointer works)." Or the best, easiest and clearest way to do things... Sure you can write confusing crap with pointers, but they are very useful.
- mjn 14y agoMy intro programming course (in high school) was in C++, and I think it would've scared me off programming entirely if I hadn't picked up mIRC-script (a very different language) on my own as a hobby. There is so much accidental complexity in C++ that it's a pretty terrible introductory language. We literally spent several weeks of the semester on how to get input and output to work properly through the giant mess that is iostreams. At the introductory level, I think the biggest issue is teaching "computational thinking" [1] or "procedural literacy" [2]: getting people thinking about the idea that you're writing specifications for a machine to carry out computations. From that perspective, it's best to pick a language that lets you get to algorithmic logic as quickly as possible. [1] http://www.cs.cmu.edu/afs/cs/usr/wing/www/publications/Wing06.pdf http://www.cs.cmu.edu/afs/cs/usr/wing/www/publications/Wing0... [2] http://dm.lcc.gatech.edu/~mateas/publications/MateasOTH2005.pdf http://dm.lcc.gatech.edu/~mateas/publications/MateasOTH2005....
- chadcf 14y agoMe too (well, ok, my first programming class was in Fortran taught by a 85 year old man who spent most of the time telling us about how much harder it was back when you had to use fortran). I hated C++. I still think it's a fairly terrible language. But, for fun I took the Harvard CS50 course to refresh my knowledge of C and I found that WAY better than my C++ course. I think C is brilliant for introducing programming because it's very very simple, yet also very very difficult. There's not much to learn, except a lot of concepts (memory usage, data structures, etc). I also think Objective-C is a really great language though, so I might be crazy. But, you give me a choice between C++ and a language that is basically C with a few additional keywords and garbage collection, and I find that an easy choice...
- kyllo 14y agoC++ is terrifying, and teaching an introductory programming course in C++ is an awful idea. Using plain C would make much more sense. C is also a better choice than Java because Java doesn't force you to learn about pointers, or memory in general, really. Countless Java bugs are introduced by programmers who don't understand what operations give you a copy of something, and which ones give you a reference to something (especially if that something is mutable). I also think Objective-C is pretty good though, especially with the addition of ARC. It's like a better C, with Smalltalk-style objects and a lot more (mutable and immutable) datatype options. Much saner and less painful than C++, but more challenging than Java.
- kamaal 14y agoThe problem complicates further with the fact that IDE fever grips you very early on while using a language like Java. When I started with eclipse + Java, within hours my perception of Java was that it was really more of 'fill up the blanks' rather than programming.
- Cthulhu_ 14y agoAnd I think that is a valuable lesson too. As a developer, the end-goal is to produce something of value, working software, not spend hours frowning over pointers and references. That was my early experience with C/C++, in any case. I did end up finishing my assignments (ranging from a fractal generator via a microcontroller operating an RC boat to a simple 3D FPS game), but I did feel a lot of overhead with non-functional things. Of course, you get the same thing in Java when you first encounter a NullPointerException, ;)
- pixelbath 14y agoThis became clear to me when suggesting using a language other than that supported by Visual Studio to one of my previous teams. Their reply of, "Can't do it; no IntelliSense" shocked me completely.
- pjmlp 14y ago> The "[language] programmer" (where [language] usually = Java or .NET) trend is a misguided attempt by industry to commoditize programmer talent. From what I can experience in the multi-site enterprise projects I participate, the industry is being quite successful at that.
- kyllo 14y agoSuccessful at commoditizing programmer talent? Perhaps. Successful at producing high-quality software, relative to the resources they are expending on it? Not so much.
- pjmlp 14y ago> Successful at commoditizing programmer talent? Perhaps. Yes this is what I mean. In most enterprise companies nowadays, developers are seen as easy to replace programming cogs. > Successful at producing high-quality software, relative to the resources they are expending on it? Not so much. Who cares about quality when the price is right?! :) Being sarcastic here, I am the opinion the software industry should be under the same quality regulations and expectations as the other industries. Usually most people return stuff that does not work properly, while with software they just live with whatever bugs the software has.