CONTENTS
A: In my own experience, authors of technical literature write mostly for self-advertisement purposes. It’s
not possible to make any decent money from such work.
Q: How does one get a job in reverse engineering?
A: There are hiring threads that appear from time to time on reddit, devoted to RE^32 ( 2016 ). Try looking
there.
A somewhat related hiring thread can be found in the “netsec” subreddit: 2016.
Q: How can I learn programming in general?
A: Mastering both C and LISP languages makes programmer’s life much, much easier. I would recommend
solvingexercisesfrom[BrianW.Kernighan, DennisM.Ritchie,TheCProgrammingLanguage, 2ed, (1988)]
andSICP^33.
Q: I have a question...
A: Send it to me by email ([email protected]).
How to learn programming
Many people keep asking about it.
There is no “royal road”, but there are quite efficient ways.
From my own experience, this is just: solving exercises from:
- Brian W. Kernighan, Dennis M. Ritchie,The C Programming Language, 2ed, (1988)
- Harold Abelson, Gerald Jay Sussman, Julie Sussman – Structure and Interpretation of Computer Pro-
grams - Donald E. Knuth,The Art of Computer Programming
- Niklaus Wirth’s books
- Brian W. Kernighan, Rob Pike,Practice of Programming, (1999)
... in pure C and LISP. You may never use these programming languages in future at all. Almost all
commercial programmers don’t. But C and LISP coding experience will help enormously in long run.
Also, you can skip reading these books itselves, just skim them whenever you feel you need to understand
something you missing for the exercise you currently solve.
This may take years at best, or a lifetime, but still this is way faster than to rush between fads.
Thesuccessofthesebooksprobablyrelatedtothefactthattheirauthorsareteachersandallthismaterial
has been honed on students first.
As of LISP, I personally would recommend Racket (Scheme dialect). But this is matter of taste, anyway.
Some people say assembly language understanding is also very helpful, even if you will never use it. This
is true. But this is a way for the most dedicated geeks, and it can be postponed at start.
Also, self-taught people (including author of these lines) often has the problem of trying too hard on hard
problems, skipping easy ones. This is a great mistake. Compare to sport or music – no one starts at 100kg
weights, or Paganini’s Caprices. I would say – you can try to tackle a problem if you can outline its solution
in your mind.
I think the art of doing research consists largely of asking questions, and sometimes
answering them. Learn how to repeatedly pose miniquestions that represent special cases
of the big questions you are hoping to solve.
When you begin to explore some area, you take baby steps at first, building intuition
about that territory. Play with many small examples, trying to get a complete understanding
of particular parts of the general situation.
In that way you learn many properties that are true and many properties that are false.
That gives guidance about directions that are fruitful versus directions to avoid.
Eventually your brain will have learned how to take larger and larger steps. And shazam,
you’ll be ready to take some giant steps and solve the big problem.
(^32) reddit.com/r/ReverseEngineering/
(^33) Structure and Interpretation of Computer Programs
xvii