4 ms·
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 an
by mahmud 17y ago
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 tutorials from the underground scene are masterpieces of juvenile bravado but they're written by people with heart. No one in academia or industry has the same passion for computing, or for that matter skill, as those "vandals".
Get a screw driver and take your machines apart (yes, get more than one machine.) Network them. Break them. Boot obscure OSes on them. Get as many computers with different architectures and instruction sets as you can get.
You don't deserve to be coding in a fancy functional distributed language with rad tools. You need to pay your dues first and get your hands dirty.
Your university probably sucks; your professor, your TA and the A-student in your classes are probably all lousy programmers. Your library there is under-stocked. Any industry representative who comes to give a speech about computing is probably a fraud. And once you graduate, or drop out, and make computing a profession; if you ever have to assemble a team of top-notch programmers to work with, the first names to standout will be strangers who you know by their nicknames from underground computing subculture. The guys you see doing interviews and recording lectures in polo shirts and khakis are laughably incompetent, big enterprise or "startup".
Join the demo scene, the amiga scene, the root-kit scene, the virus scene, the calculator hackers, etc. to see what good programmers look like. Real, honest to goodness hacking without blogging, self-promotion or careerist pan-handling. They do it for the love it, them honest thieves.
- 0wned 17y agoBest advice ever! Unplug from the 'Internets' for a year while you follow this advice or, if you must, only connect with a dial-up modem. I went with OpenBSD and C++ and that has taught me more about bits and bytes than the college degrees ever did. Ditch these self-pleasuring technology forums too. They are full of people masturbating their own egos, nothing more.
- deleted 17y ago[deleted]
- apu 17y agoI 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.
- Tichy 17y agoI 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...
- grandalf 17y agoI totally agree. You can do really awesome stuff with high level languages too. JQuery has had a huge impact, for example. The parent post nails it: Find something you want to build and then build it. I'd add that once you build it you'll probably learn enough to want to rebuild it without all the mistakes... and once you do you'll probably want to rebuild it a third time. It's supposed to be fun. Work on something you love so much that you work on it until your hands need a break from the keyboard.
- Zak 17y agoLow-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.