7 ms·
Steps to become a good hacker?
As this is probably a hacker rich audience, I thought it would be appropriate to ask the question here.
A little background, I know a little C++, C#, SQL, just enough to get me through programming classes.
So to become a decent hacker, where should i start? Like what kind of stuff should i be doing, e.g reading books, doing projects etc. What languages would be most beneficial?
~Thanks in advance HN Readers.
- ChuckMcM 14y agoBe curious.
- mindcrime 14y agoI'd say that being a hacker is more about an attitude, or state of mind, than it is about having read certain books, or knowing certain languages, etc. Now, if by "hacker" you just mean "developer" or "software engineer," then one could be a little bit more detailed, but there's still a lot of different areas to explore. That said, if you want suggestions for books, articles, links, etc: I'd suggest you start out by reading some books / articles that give a bit of the history of "hackerdom" and some insight into the hacker mindset. Some possibilities that come to mind: Hackers & Painters by our very own Paul "pg" Graham Hackers: Heroes of the Computer Revolution by Steven Levy The Soul of a New Machine by Tracy Kidder Cyberpunk: Outlaws and Hackers on the Computer Frontier by Katie Hafner & John Markoff Artificial Life: A Report from the Frontier Where Computers Meet Biology by Steven Levy Godel, Escher, Bach: An Eternal Golden Braid by Douglas Hofstadter Most or all of Paul Graham's essays. http://paulgraham.com/articles.html http://paulgraham.com/articles.html Read some of Edgar W Dijkstra's works: http://www.cs.utexas.edu/~EWD/ http://www.cs.utexas.edu/~EWD/ Couple that with a good book on the C language, some basic "theory of computing" stuff and a good algorithms book. I actually like Java as a good language to explore a lot of different things, since it has great library and tool support, plenty of community support, plenty of docs and books, etc. Learning some Java so you can play with cool libraries like Mahout, OpenNLP, etc. isn't the worst idea in the world. And, of course, learning a Lisp of some sort. This is still on my personal TODO list as well, and I've been dabbling in Clojure... but I don't think you'd go wrong with Common Lisp or Scheme either. Other book recommendations: Code: The Hidden Language of Computer Hardware and Software by Charles Petzold The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and the Turing Machine by Charles Petzold Structure and Interpretation of Computer Programs by Harold Abelson and Gerald Sussman Hacker's Delight by Henry S. Warren Operating System Concepts by Abraham Silberschatz Introduction to Algorithms by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein One (or more) of the Algorithms in FOO series by Robert Sedgewick. There are Algorithms in C, Algorithms in C++ and Algorithms in Java to pick from. Each is a multi-part series. The Java one goes up to at least 5 parts, I can't recall offhand if the series numbering is identical across languages. I also find that most hackers have an affinity for F/OSS software. If you don't already, I'd suggest running Linux or BSD as your operating system. Learn the standard command line tools, learn at least one of (Emacs|Vim). Read The Cathedral & The Bazaar if you haven't yet. Also consider some of esr's various rants, some of Stallman's stuff, etc., for context if nothing else. Edit: Also, expect somebody in this discussion to recommend reading The Art of Computer Programming by Don Knuth. I'll just say that TAoCP is more reference material than tutorial, and isn't something you'd normally just "read" as in "read cover to cover." It's a great reference to have around for when you need to dig into the deep details of implementing an algorithms, and need the mathematical stuff, etc. But it's not something you necessarily want to start with. There's SO many more places you can go though, than all this. The stuff mentioned above is good foundation stuff for a lot of paths you might want to explore, but don't limit yourself. Buy and Arduino and start doing some hardware hacking, read chemistry books and biology books, whatever floats your boat. Like ChuckMcM says below, curiosity is huge. If you're curious and don't limit yourself, you'll be a hacker.
- pchekuri 14y agoThank You mindcrime! Out of everything you suggested i have done 2 things so far. 1. I run linux. 2. I have read all of Paul Graham's essays which was what caused my interest in hacking. I will definitely take your advice seriously. Thanks again.
- tjr 14y agoThat's a very open-ended question. What do you wish to hack? When I started, I was advised to learn C. This has served me well, though I don't actually do much with C any more. I was also advised to learn Lisp. This was a very enlightening experience, but I don't actually do much with Lisp any more. I mostly write code in Python. I have long had an interest in artificial intelligence, a classic hacker topic. I still do. But I eventually discovered that even more than waxing eloquent about theories of cognition, I enjoyed building applications that people actually benefited from. I learned a lot from Philip Greenspun's books and classes on web/database programming. Even when not doing web/database work, I believe what I learned there was helped me to become a better software engineer. But software engineering is not necessarily hacking. Hackers need not produce anything that is useful to non-hackers. Hacking is often driven more by curiosity, enjoyment, and personal delight than helping non-hackers to accomplish things with a computer. Or is it? The very definition of the word hacker is almost too ambiguous to be useful. Lots of folks here recoil in hatred at the mention of ESR, but I found this interesting: http://www.catb.org/~esr/faqs/hacker-howto.html http://www.catb.org/~esr/faqs/hacker-howto.html
- mindcrime 14y agoesr is a controversial character (as is Stallman) but he is worth reading, IMO. His work has been very influential on a lot of hackers and is worth at least some passing familiarity.
- tjr 14y agoThe Jargon File (or Hacker's Dictionary) is also very interesting. ESR "maintains" it now, but a lot of the original writing was done by Guy Steele, RMS, and some other folks at MIT.
- pchekuri 14y agoThanks tjr! I do know a little C as I have taken Operating Systems. I will probably start somewhere with web/database programming as it interests me now.
- codegeek 14y agoInstead of "how", always ask "why". Once you have developed an urge to do this by default, you have become a good hacker. My 2 cents.
- orangethirty 14y ago10 Never stop. 20 GOTO 10
- csense 14y agoI read the following quote somewhere (paraphrased since I don't remember the exact wording): The apprentice hacker hears of an interesting problem, gets excited, rushes off to his computer and starts madly writing code. The master hacker hears of an interesting problem, settles back in his chair, stares off into space and says, "You know, I think I've seen something like this before..." At this point, your goal should be to expand your knowledge base. Your end goal should be to have a sufficiently good understanding of enough different tools, technologies, and ways of thinking that you can decompose anything new into ideas you already understand. So here are some random suggestions for what you should actually do: You have to have a balance between theory and practice. Try to build specific things like a blog site, a game, a raytracer, a media player, a website scraper, whatever tickles your fancy or scratches an itch. Try out different languages, libraries, IDE's, tools, operating systems. Exposure to different layers in the stack, different philosophies and different problems will increase your skills, help you learn the sense of the right tool for the job, and help you develop your own style as by combining the strengths of your different experiences. Likewise, math and theory will help your skills reach new heights, especially after you start to feel comfortable with programming. You can accomplish a lot if you don't know much theory, but theory will give you a deeper understanding of many situations and make your thoughts clearer and more effective. Your general programming abilities will improve if you learn high-school algebra, graph theory, automata theory (finite automata, push-down automata, and Turing machines), regular expressions, and compiler design. Geometry, trigonometry, calculus, and linear algebra are helpful for physics or graphics-intensive programming. Number theory and abstract algebra are virtually required to study modern cryptography.
- logn 14y agoRead the classics (preferably with a group): Pragmatic Programmer, Clean Code... (there's others, lil help?)
- alpine 14y agoHackers can be found in all walks of life, it is not a label to be restricted to those working in technology or writing code. Hackers are people that can effect leveraged change on a system (eg human, technological, natural), taking delight in the outcome. Above all, I would say a sense of mischief and fun is the common trait found in hackers. Read a couple of Richard Feynman's books. He's quite explicit - his work was often done simply 'for the fun of it'.
- anujkk 14y agoAs others have said, being a hacker is more about mindset and attitude than your technical capability. It is more a journey than destination. Anyway here are some suggestions: 1) Read this - http://www.catb.org/esr/faqs/hacker-howto.html http://www.catb.org/esr/faqs/hacker-howto.html 2) Try to get into explore-learn-do habit. Always look out for new things to learn and use that knowledge to solve some problems. 3) Learn Linux - If you aren't doing it already install a linux OS and try to use it as much as you can. I'm not asking you to ditch Windows. Install both if needed. If you aren't able to do something in linux, then do it in windows. Ubuntu Linux is good to start with. 3) Learn Programming. I would suggest you to begin with Python as it is easy to learn and have very good library ecosystem. Learn a relational(mysql) and a no-sql(mongodb) database along with python. Try to understand what different kinds of applications can be made - Web app, Desktop app, Mobile app, libraries, scrapers, servers, clients etc. 4) Learn about WWW, HTTP and Web Development with HTML, CSS, JavaScript and any python web framework - django/flask/etc. 5) Code, code and code. Keep learning and making new things.
- kayman 14y agolearn to be curious. play with code. Build small utilities, even if it's just a blog or website. Get a domain name and play with getting a simple site out there. Iterate and add things you like. In the process you'll learn fundamentals, each time building on previous knowledge.