Live data from Hacker News

Ask HN: Confused semi-newbie programmer needs some advice.

news.ycombinator.com

31–40 of 57 posts

Re: Ask HN: Confused semi-newbie programmer needs some advice.

#32

Earlier quoted context omitted.

That sounds fascinating. I'll dig through the course catalog and see of there's anything comparable.

If there is, by all means take it. In case there isn't, though, here are some books I've found particularly helpful teaching myself the same material. (This is a lot of reading, and they'll take time to work through. Alternating between studying theoretical stuff and working on real projects will help keep you grounded.) First off, absolutely get a copy of _Structure and Interpretation of Computer Programs_ (SICP: ht…

Thanks a ton for the book recommendations. I'll be sure to look them up.

Re: Ask HN: Confused semi-newbie programmer needs some advice.

#34

Scheme.

Hi. It looks like you're fairly new to HN. Could you explain why you're suggesting Scheme, suggest particular projects or things to read, etc.? It will be far, far more helpful for everyone involved than a one-word answer.

Thanks.

Re: Ask HN: Confused semi-newbie programmer needs some advice.

#35
post #27

Learn Unix on a real OS; like BSD or Slackware. High level programming languages are froth; once you understand the basic concepts, it's best to work with C and system calls til you're absolutely sure what you are doing. Learn how to use a debugger, disassembler, packet sniffer and every utility you can find for creating mischief. A few books on actual hacking, you know, the "blackhat" kind, might come handy. Hacking…

[deleted]

Re: Ask HN: Confused semi-newbie programmer needs some advice.

#36
OK, a bunch of others recommended it, but I'll add my voice and recommend SICP. There are lots of good books on programming, but it is the best single source. After that, decide what parts of programming you like, and come back asking for more specific books.

Good luck.

Oh, and the stuff Mahmud said about your professors and industry types being phonies is largely true. Not always, of course, but often enough. That you're even on this site suggests that you're prepared to think deeper than them.

Re: Ask HN: Confused semi-newbie programmer needs some advice.

#37

This is probably different from the other (great) advice on this page, but here goes. If you have 10 months before you got back to university, I suggest, you work with one language and build something substantial in that time. It doesn't matter which language you select (and this is where my advice differs from those of people who recommend lisp/Haskell and so on, you could choose C or C++ or Java, it doesn't matter)…

I agree completely. There's a huge value to learning a number of other languages and they will help you approach projects from different conceptual angles, but most important is the ability to approach a project. You'll learn more about how things are really working under the hood and the limitations of your chosen language by building one substantial modular project in that time. Visual feedback is definitely hugely important too. I couldn't agree more that working on it every day is essential, if you want to get great, code isn't a job, it's life. Just like learning Japanese, if you want to really internalize what you're learning, you have to immerse yourself.

Re: Ask HN: Confused semi-newbie programmer needs some advice.

#38

OK, a bunch of others recommended it, but I'll add my voice and recommend SICP. There are lots of good books on programming, but it is the best single source. After that, decide what parts of programming you like, and come back asking for more specific books. Good luck. Oh, and the stuff Mahmud said about your professors and industry types being phonies is largely true. Not always, of course, but often enough. That y…

I wouldn't call my professors "phonies", but it's true that many of them were certainly poor programmers. But that's fine, because they're professors in a CS department, and CS is not programming.

Re: Ask HN: Confused semi-newbie programmer needs some advice.

#39
post #27

Learn Unix on a real OS; like BSD or Slackware. High level programming languages are froth; once you understand the basic concepts, it's best to work with C and system calls til you're absolutely sure what you are doing. Learn how to use a debugger, disassembler, packet sniffer and every utility you can find for creating mischief. A few books on actual hacking, you know, the "blackhat" kind, might come handy. Hacking…

I often see this kind of advice and it always reeks of "I went through this and I turned out ok, so you should do it too."

The problem is that I think it's completely the wrong thing to do. One of the major effects of programming in a language extensively is that you start to "think" in that language whenever you have a new problem. This is both good and bad, of course, because while it helps you become proficient in the language, it also prevents you from seeing possibly simpler solutions (i.e., that aren't easier in your language).

Also, languages don't arise in a vacuum -- they're designed in a certain time period, with various assumptions about environment and hardware baked right in. This can be extremely dangerous because as a user of the language, you will start to think in terms of those limitations as well, even if they no longer apply! So for example, C is one of these languages I'd strongly NOT recommend, unless you're working in a domain where it's necessary/preferred (low-level networking, some embedded devices, etc). C assumes you live in a time when computers are quite slow and have little memory (both of which must be very carefully monitored), there's only 1 processing core (so you can just do sequential programming), and programmer time is less valuable than execution time (so you can spend days optimizing the hell out of small routines). But the times have changed -- computers are fast, they all have multiple processors, there's a lot of RAM, etc. Most people want to be building more complex things, and for 95% of applications, I'd wager that C is exactly the wrong language to be "thinking" in.

Starting with a more "modern" language (which includes the LISPs, despite them being older) lets you avoid these preconceptions.

Also, there seems to be a lot of penance involved in the parent's advice -- "you need to pay your dues first and get your hands dirty." Fuck that shit.

Sure, if your end goal to is to really learn this low-level stuff, then go for it. But if your interests lie elsewhere, do that instead by jumping right into that domain. Maybe you want to build large distributed systems, or come up with new visualization tools, or build a logic system. C seems like a remarkably bad choice for these and so many other projects. In fact, it seems like a bad choice to even learn C first, precisely because your notions of what's possible, of the "right" way of approaching problems will become infected with the C mindset.

Most importantly, motivation is a key resource you must not squander. For many people, fixing broken computers, struggling with a difficult operating system, or looking at assembly and network packets is grueling work with no payoff. I'd be willing to bet that for such people (many of whom could be great hackers in other domains), the parent's advice is sure to sap your morale and turn you off from programming.

Finally, time is not an infinite resource either. Why waste your life on things that don't interest you and won't help you much in the long-term? Work on things that excite you, and you'll not only be so much happier, but you'll also learn much more in the long run.

P.S. I know several "real hackers"/"good programmers" and while some of them might fit the parent's description of such, many of them also fit the parent's description of the poseurs -- the A-student in my class back in college, the guy recording lectures in polo shirts and khakis, the family man with a wife and kids and a mortgage. Stereotyping is still stereotyping when applied in the opposite direction.

Re: Ask HN: Confused semi-newbie programmer needs some advice.

#40
post #27

Learn Unix on a real OS; like BSD or Slackware. High level programming languages are froth; once you understand the basic concepts, it's best to work with C and system calls til you're absolutely sure what you are doing. Learn how to use a debugger, disassembler, packet sniffer and every utility you can find for creating mischief. A few books on actual hacking, you know, the "blackhat" kind, might come handy. Hacking…

I have to disagree. Sure, if you go through that chore, you'll probably end up being a cool hacker. However, systems programming might not be what you really want to do (maybe you want to be a cool Hacker of JavaScript frameworks or whatever). I think it is better to work on stuff you really want to do. Maybe you want to create games - if at some point you realize your game's performance sucks, you can still dive down and learn all the other stuff. In other words, learning systems programming first is just premature optimization.

I don't even think learning stuff just for the sake of learning it even works. You always need some reason to learn stuff to really need it. For example, you can't learn photoshop by reading a book about photoshop. You have to try to accomplish something.

So set yourself a real goal, "I want to become a good programmer" doesn't count, something you want to build. Perhaps try to write a MMORPG - everybody will tell you that you will fail, but who knows.

I think it is very stupid to assume that after one year of learning C you can not yet program good enough to do anything. Set yourself a goal, then try to figure out how to achieve it. In fact, in my opinion, the job of a software developer is not to be good at some kind of programming language and then routinely solve problems with that skill. The job is to constantly learn new skills and to adapt to new requirements. Therefore the attitude "I am not good enough" is the exact opposite attitude of the attitude a programmer should have.

Disclaimer: I never got into C Systems programming myself. Probably I suck as a programmer - so what. We all do.

Edit2: Flicking through "Programming Clojure" only requires an afternoon, "Progamming Erlang" could be read in a weekend. Why don't you (the original poster) consider what you want to do, then evaluate a few possible paths (different languages, frameworks), pick one and get coding? Choosing a language just because of popular vote seems rather risky.

Edit3: Your MMOPRG's code will probably shit. User's will never know and won't care, though. Your second MMORPG's code will be shit in a very different way. And so on...

Post reply on HN