Live data from Hacker News

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

news.ycombinator.com

41–50 of 57 posts

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

#41
post #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…

[deleted]

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

#42
post #3

You're sort of finding the pleasure and pain of a CS degree: Data Structures doesn't teach you how to program, except in a superficial way in a single language. It teaches you how to manipulate certain building blocks of our field. You'll be thinking in terms of lists, sets, and hashmaps until the day you die, no matter what programming language you eventually end up using. Now, in C, working with lists requires know…

Thanks for the advice. I do know HTML. Simple webpages made great income for a highschool student. Should I go with simple Javascript, or something more? I only did HTML/CSS, nothing at all with dynamic webpages.

Javascript and PHP or Ruby.

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

#43

I'm going to say learn/refresh your python. it'll let you focus on the programming, and not have to worry about language specific constructs. Good refresher: http://www.diveintopython.org/

Python has always impressed me as an extraordinarily pleasant language, easy to learn and plenty powerful. I second the recommendation.

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

#44
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…

Low-level programming languages are molasses; once you understand the basic concepts, it's best to work with Scheme and abstractions til you're absolutely sure of what you're doing. Learn how to use a REPL, interactive debugger, etc....

The rounded programmer understands both computation and computers. C or an assembly language is a great way to learn how the computer works, but working at such a low level makes it harder to see the structure of the procedures you write and the processes they generate. Personally, I think it's more fun and rewarding to learn about computation first, then take a look under the hood. Others may disagree. Either way, you should learn both eventually.

For learning about computation, there are few better resources than The Structure and Interpretation of Computer Programs, MIT's introductory computer science text for over 20 years. It, and supporting course materials are available online free of charge, and there's a print version for traditionalists.

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

#45

I'm a fellow CS student, but I'm a bit deeper into the curriculum. As a Junior, I'm just now learning other languages in class. I see those first two years as something necessary. It's fairly trivial for me to sit down and read most OO languages now that I've been taught Java for two years in college (plus one year in high school). After learning the syntax, it's far easier to take apart those concepts that they're t…

I'd forgotten Django. That sounds interesting. I did enjoy Python when I used in in Highschool, and I wouldn't mind learning more. About your other point, with sticking to C/C++ until the language disappears, I think I'm just afraid I'll get stuck in that paradigm, and if I don't broaden my horizons now, I'll have a hard time later on. You may have a point though. I'll think about it. Thanks for the advice.

I agree that you should broaden your horizons. It gives important perspective, and makes your mind a lot bigger. There's more than one way to do it, of course, but here's a sequence of languages that I would recommend:

Python: this will teach you to program at a higher level, and the libraries will make it easier for you to get into web programming or GUI programming or simple game programming or any other thing that excites you. That's what it's all about, when you're learning: do something that excites you, and you'll learn faster. Python has a very low barrier to entry, so try this first.

Lisp: once you know Python, you're not going to be bowled over by things like garbage collection. But you can still learn a lot from Lisp; if nothing else, it can give valuable practice with recursion and metaprogramming and the idea of a read-eval-print loop. It's a cool and fun language.

Haskell: this one is kind of difficult to learn, which is why I recommend learning it after you've got Lisp under your belt. A lot of advanced computer science stuff tends to debut in the Haskell community, and the average intelligence of Haskellers is pretty shocking. It's also a neat language that you can do cool projects with.

If you can learn these languages, I guarantee that you will be able to shift paradigms a lot easier than people who coasted along with the standard trio of C, C++, and Java.

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

#46

IMHO as a learning language nothing beats LISP. It's a little tricky in the beginning, but the pay-off is great simply in the way it changes your perception of programming. This is a great place to start: http://gigamonkeys.com/book/

That's what I've been working off of for the past week or so. It's been really fun, I think I was just wondering if it's everything people say about it. Thanks for the input. I wouldn't mind continuing with CL. Many people I've talked to said they find it incredibly useful for small projects that they need to throw together in a short time.

I love the way that Lisp lends itself to incremental testing. You can discover most bugs just by testing functions at the REPL. If you plan to continue with Lisp (hooray!) then I would recommend becoming familiar with SLIME if you're not already.

http://common-lisp.net/project/slime/

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

#47
What they teach you as C/C++ is the final point that these languages have come. It is the final outcome of their evolution. It is absolutely normal that you don't get it when they teach you encapsulation, classes, functions, return values, arguments.

How did they get created or conceptualized in the first place? Why do we need them?

Do it the right way: Start with C, and start from the smallest and most fundamental constructs that C has: The structures and functions. Know that there was only assembler in the first place. Then look into how function calls are made. Disassemble the simplest function you have and understand its logic. Now you know why there is a function. Then go into the structure. Disassemble one. Put different types in it, see how they get laid out in memory.

Start as above, and learn how things work down to the last byte. Then eventually you will cover all constructs created and you will know where they come from. Do the above for 3-5 years, each time you encounter a new language idiom or concept.

Finally you will see that in all strongly typed languages most constructs are worthless and they get in your way. You will get back to using C ;-)

You might also go for the much higher level languages or different areas of computing, but since you showed interest in understanding programming deeper, this is the way to go.

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

#48
post #10

Well your coming to that realization 15 years earlier than I did. I developed commercial apps in C/C++ and only recently have discovered lisp and other related languages, and just find them to be much more enjoyable to think and hack in. If you want an absolute mind blowing trip, grab a copy of scheme or a lisp variant such as Clojure [hip at the moment].. and work through SICP - 'Structure and Interpretation of Comp…

Fully agree with this, SICP won't make you an expert, but it will take away much of your feelings of being lost.

Text: http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-4.html#...

Videos: http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussma...

I'd recommend at least the first video lecture and see if you like it.

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

#49
post #23

Learning languages in different families teaches you to abstract away the abstract algorithmic concepts from the language family specific concepts. If I were designing a CS program, I'd probably include: - C (imperative) - Python (object oriented) - Scheme (functional) Interesting with that selection is that none of those are my weapons of choice in their niches for actual projects (I prefer C++, Ruby and Scala), but…

C is indeed imperative, but so is python and scheme too. In fact, both scheme and python are multi-paradigm languages, where both support functional (lambda calculus), object-orientation and imperative statements. If you want to focus on learning your computer, in a von Neuman way, then C is perfect. C++ is a dead horse, that should be left alone. But with scheme, you can focus 100% on algorithm development. That is not true with C/C++, which strictly speaking requires extreme caution with regard to manual memory management. Python is fun too, but has mainly gained more momentum than scheme because it has a more pragmatic focus on building and maintaining libraries with backward comp.. If the God of scheme manages to summon their rXrs camps into one 'multi-cultural' one - then we can expect scheme to mainstream adoption.

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

#50
post #26

I would recommend learning JavaScript. Java, VB, PHP, etc. are pretty much all the same in comparison to JavaScript. I’m not talking about syntax or patterns but about general purpose. In my opinion, JavaScript is the most important complementary technology to the - what I call them - backend languages. Today, web-enabling almost always is a requirement. People usually want access to their applications with their iph…

I think JavaScript will become a good option for the server, too (or already is so). Furthermore, lots of things can be scripted with JavaScript, including Photoshop. Although a couple of years agao I was warned against scripting PS with JS, so I am not sure.
Post reply on HN