It all started in 1998
We are reaching 2020 ! haaaaaaa.
I discovered PHP in 1997-1998 with PHP 3. I started it professionnaly in 2002 with PHP 4. During the 1996-2002 era, I was a student studying physics and micro-electronics (both analog and digital worlds).
I started my computer-related studies by wiring pins of a Motorola 68HC11 and pushing assembly into it using VHDL, basically to make the chip solve a problem : manage lights and signs at a complex road cross for example. After a year of electronic circuitry hands-on and heavy assembly programming, I was introduced the C language. Finally a language that takes less lines to write the same piece of code than assembly ! Finally a language that is human readable, easilly understandable and understandable by any architecture as soon as a compiler would be available for the target ! WOW.
With that, you add some analog-world fun (Mainly wireless : FM/AM radio spectrum, then the GSM specification studies), and you add some more digital-world fun, like for example the full study of the Rainbow-Books (the Compact Disc norm) and especially the 8to14 modulation (EFM), the channel coding schemes such as Reed Solomon and huffman coding. I trully love that kind of science, that can be sumed up to just one man : Shannon and the theory of information coding. Amazing domain. I love solving concrete life problems with the help of machines, and how engineers solve problems using their brain and a bunch of maths.
As a final school exercise for digital electronics, we were asked to create a small operating system. A tiny one, but a Kernel, yes, with some memory protection, some exception handling, etc... It did take a lot of time, with the CPU often stuck in loops and things like that. I remember. That was in 1999, our code counted several thousands lines of code, and we were a team of 4 students to work on it. It had to compile on motorola 68000. We had 1Mb of RAM, and no SSE, so every piece of code should be optimized.
Then the web took off. Then I started getting interested, and I used the C language to code a very tiny webserver, and with the help of CGI I wrote some basic CGI processing, in plain C, to play with the Web, like a toy. First time I did code low level sockets and was introduced Berkley sockets, that was under Linux 2.X. Pretty much the same thing Rasmus Lerdorf did few years before me. From those C tools, he extracted what became PHP : a high level language, target with the Web in mind, where you write few lines and get a result, where you don't have to allocate or free memory anymore, where you don't care about CGI anymore... Such a big step forward.
Everyone should remember that. Everyone should remember that the PHP language is a framework itself on top of an operating system to provide some nice Web programming features and abstract the underlying machine and protocols details. Feel free to play with thoses old PHP versions, still available.
~20 years have passed. We are today in 2020
We are in 2020, and today when I talk computer-related stuff to most people around me - who are professionals - they don't understand me anymore most of the time. And I don't understand what they tell me neither ! Well, kind of. Surprising how 20 small years have changed the face of the computer domain, and the way it is taught to newcomers.
Today people I work with don't know how a Von Neumann Architecture works, or even what it is. Today, people are mainly Web-targeted workers/developpers, something really far away from a full stack computer scientist I tend to define myself as.
Today, people get taught by reading some Web sources/articles. But by learning by yourself using the Web as the only media, you take a BIG risk of bad learning. You would learn whatever interests you, and ignore whatever does not. That's not what you do when at school/university where you are taught to be a "complete" scientist.
For example, have you learnt about the computer sciences history ? Why we are here at this point ? And how we got to where we are today ? The mistakes we did before, and how to prevent doing them again nowadays ? Let's say back from 1960, up until today ? Do you know the most important thing that has never happened in computer history : UNIX ? The most important thing that has never happended in the computer-networking history : packet switching ?
The C language, the language father of every other ? Really ? The basics on top of what we build stuff today.
It is trully amazing how people today, don't remember or simply ignore how our fathers takled problems before. And the problems we're dealing with today are the same, they have not evolved that much, really. I suggest you really should buy some books, and get some courses.
You may be a good web developer, but you'll never be a good programmer, if you haven't faced at least once in your life, real programmer problems, like how to compute such a load using the less CPU cycles possible and the less memory possible : which nowadays translates as the less Planet-Earth resources as possible. Duff's device anyone ? Please, when I'm riding my bike on the morning, I would like not to breathe the dust generated by those crazy-mad datacenters running so poor algorithms, because one is given in hands a power it does not master. Right ?
But that is my opinion, and it may be different from what other people I have to work with think : I accept that. I also accept that our world evolves, but should that mean that people working on nowadays' code totally ignore the fundamentals ? Mmmm ? I don't say master, I say have the full picture of the problem and its solution in your brain and then, focus on the part you feel comfortable with.
Anyway, time is up for me now.
The future about me ?
I'm going to leave Paris, and move somewhere to south east of France, in September 2020, just next to the mediterranean sea. Not far from ETSI HQ, is it a hint ? I retire from active Web development. I will still work with computers, but mostly on my own projects, or with people I choose. As I like sharing my knowledge, I will still give training sessions, this is a pleasure because I feel many people lack some crucial knowledge to fit their actual technical seat. I'm up to fix that. If you need to get trained about a topic I master, then feel free to contact me. If you have a project you'd like me to be involved into, feel free to contact me. But be warned that I'm totally free to disagree, and disapprove your request.
My computer-related future is about programming, mainly in C, sometimes PHP or Python. Networking as well. I even could stick those together and program for networks. I could open source and push some code in the future, why not :-)
Then, will come other topics. Computers have taken a big part of my life as of today. Time to taste other topics than computer sciences related stuff. I like photography and I start getting some results from such a domain, so here again I could help you covering your event if needed, feel free to contact me about it.
I like wildlife, I own reptiles : snakes, they deserve a blog post, each of the species I keep. I will push into such a domain by getting professionnaly trained.
I enjoy the very hot sun and warm weather (40°C are OK to me), the sea and the quietness as well.
A little bit of computers, then .... A big part of walking, riding, smelling, breathing, living, photographing, petting my snakes (yes I do)... Simple. No more problem, no more noise, just life.
Want to push computer sciences because you missed them ?
All the real deep knowledge resides in books. Not on the web. What FooBar says on StackOverflow may not be right (and it is sometimes wrong, or partially right), but what the people who created the computer world we live in today say, is true. If not : we wouldn't be here today, behind our screens. Hear about the true scientists and don't scratch the topic : master it deeply, far down reaching the hardware level if necessary.
Here is what I have read so far and what I recommand about computers and networks. Both french and english references, not exhaustive and in no particular order :
- Advanced Topics in C Core Concepts in Data Structures (Apress)
- Algorithmes et structures de données génériques - 2ème Edition (Dunod)
- Algorithms and Parallel Computing (Wiley)
- Algorithms in C (Addison Wesley)
- Learn C the hard way (online book)
- The C Programming Language Ritchie & Kernighan
- The GNU C Library Reference Manual
- Guide to Assembly Language Programming on Linux (Springer)
- L'Assembleur Facile du 6809 (Eyrolles)
- Modern X86 Assembly Language Programming (Apress)
- Professional Assembly Language (Wrox)
- High Performance Browser Networking (Oreilly)
- Maximum Apache Security (Sams)
- HTTP - The Definitive Guide (Oreilly)
- The Apache modelling project (FMC)
- The Linux Programming Interface (NoStarch)
- Programmation systeme en C sous Linux (Eyrolles)
- The Art of Debugging with GDB DDD and Eclipse (NoStarch)
- Linux System Programming (Oreilly)
- An Introduction to GCC (Network Theory Limited)
- Advanced Linux Programming (Newriders)
- PThreads Programming (Oreilly)
- Linux Kernel Networking (Apress)
- The Definitive Guide to Linux Network Programming (Apress)
- Guide to IP Layer Network Administration with Linux (Securepipe)
- Understanding Linux Network Internals (OReilly)
- Unix Network Programming (Prentice Hall)
- Linux Kernel Development (Developer's Library)
- Linux insides (OxAx Gitbook)
- Operating Systems : three easy pieces (Arpaci-Dusseau Books)
- Understanding The Linux Kernel (Oreilly)
- UNIX File Systems (Wiley)
- Dynamic Library Programming Topics (Apple)
- Autotools, A Practicioner's Guide to GNU Autoconf, Automake, and Libtool (No Starch)
- Cryptography&Network Security Principles and Practice (William Stallings)
- Cryptography in C and C++ (Apress)
- BulletProof SSL and TLS (Feisty Duck)
- Cryptography Engineering Design Principles and practical applications (Wiley)
- Openssl Cookbook (Feisty Duck)
- TCP IP Sockets in C (Elsevier Inc)
- The DHCP Handbook (Sams)
- Pro DNS and BIND (Apress)
- Practical packet analysis with Wireshark (No Starch)
- Ethernet, The Definitve Guide (OReilly)
- NMAP in the Entreprise (Syngress Publishing)
- Networking a Beginners Guide (Mc Graw Hill)
- Head First Networking (OReilly)
- Ethernet Switches (Oreilly)
- DNS And Bind (Oreilly)
- Computer Networking A Top-Down Approach (Pearson)
- BGP (Oreilly)
- Authentification réseau avec RADIUS (Eyrolles)
- 802.11 Wireless Networks The Definitive Guide (Oreilly)
- TCPIP Guide (No Starch)
- TCP IP Illustrated (Addison Wesley)
- TCPIP architecture design and implementation in linux (Wiley)
- FreeRadius (Packt)
- Learn Router OS (Dennis Burgess)
- RouterOS by example (Bruce Pinnell)
- Migrating applications to ipv6 (OReilly)
- Guide To Php Design Patterns (PHPArchitect)
- Object Oriented PHP Concepts Techniques and Code (NoStarch)
- Pro PHP Patterns Frameworks Testing and More (Apress)
- Code Optimization: Effective Memory Usage (A-List)
- Compilers Principles, Techniques, and Tools (Pearson)
- Hackers Delight (Addison Wesley)
- Structure and Interpretation of computer programs (MIT Press)
- Theory of Computational Complexity (Wiley)
- Understanding Computation (Oreilly)
- Write Great Code (No Starch)
- The Art of Software Security Assessment: Identifying and Preventing Software Vulnerabilities
- Cross-Site Scripting Attacks XSS Exploits & Defense (Syngress)
- Developers Guide to Web Application Security (Syngress)
- PHPArchitects Guidet to PHP Security (Marco Tabini)
- Professionnal Pen Testing for Web Applications (Wrox Press)
- Windows Internals (Microsoft Press)
- Windows Sysinternals Admin Reference (Microsoft Press)
I also did read many other topics references, mostly related to electronics and computing :
- The H.264 advanced video compression standard (Wiley)
- Coding of audio-visual objects (MPEG ISO)
- An Introduction to Video Compression in C/C++ (Fore June)
- CD Cracking Uncovered Protection Against Unsanctioned CD Copying (A-List)
- Codes for Mass Data Storage Systems (Shannon Foundation Publishers)
- Advanced Video Coding Systems (Springer)
- DVD Demystified (McGraw-Hill)
- ECMA-267 (ISO)
- Game Programming algorithms and techniques (Addison Wesley)
- Beginning Game Programming (Thomson)
- Data Structures For Game Programmers (Premier Press)
- Networking And Online Games (Wiley)
- Getting Started with OpenBTS Range Networks (OReilly)
- GSM Networks: Protocols, Terminology, and Implementation (Artech House)
All those account for books, not thesis or deep focused topic specifications I did read and own papers about. That includes also many processor and architecture sheets, like the IDT R30xx Family Software Reference Manual for example : The CPU of the Playstation 1, from SONY.
Yes I know : I love electronic systems, and I've always loved them, that's simply me.
Also, I recommand those Youtube channels :
- ComputerPhile. A must-absolutely-pin. Courses from our fathers, on the fundamentals of computer sciences. Do you know what the UNIX's grep word means, why it is named grep ? Its creator will answer you ! Isn't that priceless ?
- NumberPhile, the sister about maths. As maths is the root of all sciences, it must be pushed in your knowledge.
- Talking about maths, I really really recommand 3Blue1Brown. Watch, you'll be surprised how amazing that channel is. Many theorems and principles I've learnt during studies, and sometimes used in algorithm (FFT obvisouly), presented so that you understand them really deeply. Once again : a priceless resource.
- TechnologyConnection, all about science and especially subjects I have studied in my life. I like this channel a lot.
- Modern Vintage Gamer, about PCs and consoles from 1995 to nowadays, and especially how all those consoles got hacked. Hacking a console is a true challenge nowadays. I studied a lot the PPC of the Wii, and the R3000 of the PS1, as well as many of the architecture of the PS2 and PS3, the GameCube etc...
- There exists many more.
You may still reach me, physically on some rare conferences I'd like to attend or still speak at, or remotely. Be aware that I will mainly be ... absent, retired from computer related stuff. Please when talking to me, remember that I know my stuff, so please : know yours.