> I have wasted 3 starting years of my career. Is there any way to start over?

You have not lost any years, **you learned many things**. http://norvig.com/21-days.html is providing a mind-provoking insight. And you need to read [*Bullshit jobs*][1], it is mind provoking and covers quite well software development jobs, since most software projects (more than half of them) are somehow "failing".

And you also learned how to behave at the workplace. And that is valuable on a resume.

At last, please realize that **software technology is by essence very brittle** and don't last long. **What was a buzzword in 2016 will become old-fashion (or [*legacy* code][2]) in 2022**. 

**What matters much more are *programming concepts***  **and [software development][3] *skills*** (see also [softwareheritage][4] for an important insight), and **ability to learn new things**, including even new [problem domains][5]. All this last for an entire career, and **all of them are appreciated and *valuable* on the job market**.

As instances of programming concepts, consider non-exhaustively for example : [algorithms][6] that you have used in your code, independently of the programming language; [computer science][7] concepts - including [operating systems][8] and their API such as [POSIX][9] or [WinAPI][10] or [Sockets][11], [protocols][12] such as [HTTP][13] or [SMTP][14], [DBMS][15] such as [PostGreSQL][16] or [MongoDB][17], [distributed computing][18] techniques such as [MapReduce][19], asynchronous [message passing][20] or [remote procedure calls][21],  etc... Mention a short list of high-level programming concepts in your resume.

As software development skills, consider the various programming languages you know, other more or less "computer" languages you are familiar with (such as CSS, HTML, LaTeX, DocBook, XML, JSON, DOM ...), and your familiarity with several software engineering tools ([version control][22] tools like `git`, [build automation][23] tools like [`make`][24] or [`ant`][25], [source code editors][26] or [IDE][27]s like [`emacs`][28] or [Eclipse][29]) that you practice daily. Write about all of them (in a single paragraph!) in your resume. But emphasize in that CV your ability to quickly learn how to use new software engineering tools and learn new computer languages.


 For example, I first programmed in 1974 on punched cards, but the programming language used at that time (PL/1), and the OS I did use ([MVS][30] with [JCL][31]) at that time have been forgotten, and I forgot many details about them. Later, I professionally programmed in C (actually I was mostly [metaprogramming][32] in C around 1990), but today C is out of fashion (so I'm [also][33] using [*C++14*][34]), and I might learn [Rust][35] and I did code, a few years ago, [some][36] software in [*Go*][37].


I am 60 years old in august 2019, and have spent all [my career][38] (except one sabattical year at [INRIA][39]) as some computer scientist research engineer at [CEA][40], since 1985, working in the *same* organization (of 16000 people). I essentially had two roles: one at its DEN division, and another at its DRT division. I switched teams only a few times -perhaps 3 times- in my entire career (e.g. the colleagues I have today are nearly the same I did have in 1999, and the unit I am working in, called a lab of about 25 permanent staff, keeps the same name).

I have written more than a million lines of code during my career. If I consider amongst them what code has actually been used by other people in real life (not just cited in some paper), then honestly I could only name the [GCC plugin][41] feature and the less than 10KLOC I contributed to [GCC][42]. During the last 20 years, it honestly is the only piece of code, written by me, that is useful to others.

And I am not alone. If you start reading papers and books on software project management (start with the [*Mythical-man month*][43] please, it is a classic of its kind) you'll understand that most software projects are failing. The typical failure rate of software projects is still about 50% even in 2019.

But I did have a lot of fun writing all the code that I did write during my career, so what else can I expect?

I have been naive enough to only understand very recently that my actual role (not the one mentioned on contracts, of course) is to be the support of corporate tax optimization, (by research tax credit done by corporations).

In other words, **you just need to grow up. You learned lot of things in 3 years, and these can go in a valuable resume.** 

And the most precious thing a software developer learns is not about any particular kind of software technology (such as Java Servlets). It is related to practice, and the *relation* between your day-to-day job and [**computer science**][7]. Just ask yourself honestly: have you understood all the details of [*Introduction to Algorithms*][44] (or any equivalent book or university course)? Between you and me, I did not. And that is more than thirty years that I am reading such books. My hairs are white, I am grand-father 7 times....


> What should I do? 

If you want to learn even more things, I can give a very simple recipe: **contribute, during your personal free time** (e.g. a few hours every week-end, and perhaps 30 minutes every other working day, during the evening, at home), **on any *existing* [free software][45] project** (you'll find thousands of them on [github][46] & [gitlab][47]), but don't choose a huge project (but one with only a few hundred thousand lines of code, and several dozen of fellow programmers). Use your own personal computer for that (not a PC belonging to your employer). Mention that in your resume. 

Perhaps even take time to learn a new programming language while doing that, e.g. contribute to some free software project in a language you are *not* using at work. **You'll become more competitive** than your fellow programmers who did not that. Of course, install some [Linux distribution][48] on your home *personal* computer (since Linux is mostly made of free software, and since it provides an excellent development environment for coders). And since you contribute to an *existing* free software project, you'll learn even more how to work in a team, and the team working on that particular project will teach a lot of things to you.

For example, you are now a Java expert. Then contribute, on your free time, to some existing [Guile extension][49] project. You'll learn both a new programming language ([Scheme][50], the language used in [SICP][51], a freely downloadable book -still today, the best introduction to programming I know- that *every programmer* should have read) and a new approach to programming (embedding an interpreter in some existing program). And **that is *very valuable* on the job market place** (much more than any particular technology), because you then show -to potential employers- that your mind is flexible: you are able to learn another programming language, and another way of programming.

Of course, don't become tied to one particular programming technology. But you know that already!

PS. If you want to contribute to some weird free software project (to which a very active contributor is an Indian software developer, Abhishek, working on that project on his spare time while being employed full-time), read [this draft technical report][52] (skipping the few mandatory pages for European bureaucracy) then, if the ideas there are interesting you, contact me by email to `[email protected]`. But the free software project I have in mind is more a research project than a development one, and it does share most of (but not all) the *ideas* explained in that [report][52], while having different *goals*. And that *Abhishek is **learning** a lot of **new things*** while working on that free software project.


  [1]: https://en.wikipedia.org/wiki/Bullshit_Jobs
  [2]: https://en.wikipedia.org/wiki/Legacy_code
  [3]: https://en.wikipedia.org/wiki/Software_development
  [4]: https://www.softwareheritage.org/
  [5]: https://en.wikipedia.org/wiki/Problem_domain
  [6]: https://en.wikipedia.org/wiki/Algorithm
  [7]: https://en.wikipedia.org/wiki/Computer_science
  [8]: http://pages.cs.wisc.edu/~remzi/OSTEP/
  [9]: https://en.wikipedia.org/wiki/POSIX
  [10]: https://en.wikipedia.org/wiki/Windows_API
  [11]: https://en.wikipedia.org/wiki/Berkeley_sockets
  [12]: https://en.wikipedia.org/wiki/Communication_protocol
  [13]: https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
  [14]: https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol
  [15]: https://en.wikipedia.org/wiki/Database#Database_management_system
  [16]: https://postgresql.org/
  [17]: https://en.wikipedia.org/wiki/MongoDB
  [18]: https://en.wikipedia.org/wiki/Distributed_computing
  [19]: https://en.wikipedia.org/wiki/MapReduce
  [20]: https://en.wikipedia.org/wiki/Message_passing
  [21]: https://en.wikipedia.org/wiki/Remote_procedure_call
  [22]: https://en.wikipedia.org/wiki/Version_control
  [23]: https://en.wikipedia.org/wiki/Build_automation
  [24]: https://en.wikipedia.org/wiki/Make_(software)
  [25]: https://en.wikipedia.org/wiki/Apache_Ant
  [26]: https://en.wikipedia.org/wiki/Source-code_editor
  [27]: https://en.wikipedia.org/wiki/Integrated_development_environment
  [28]: https://www.gnu.org/software/emacs/
  [29]: https://en.wikipedia.org/wiki/Eclipse_(software)
  [30]: https://en.wikipedia.org/wiki/MVS
  [31]: https://en.wikipedia.org/wiki/Job_Control_Language
  [32]: https://en.wikipedia.org/wiki/Metaprogramming
  [33]: https://github.com/bstarynk/bismon/blob/master/misc_BM.cc
  [34]: https://en.wikipedia.org/wiki/C%2B%2B14
  [35]: https://www.rust-lang.org/
  [36]: https://github.com/bstarynk/monimelt
  [37]: https://golang.org/
  [38]: http://starynkevitch.net/Basile/cv-Basile-Starynkevitch.pdf
  [39]: https://en.wikipedia.org/wiki/French_Institute_for_Research_in_Computer_Science_and_Automation
  [40]: https://en.wikipedia.org/wiki/French_Alternative_Energies_and_Atomic_Energy_Commission
  [41]: https://gcc.gnu.org/onlinedocs/gccint/Plugins.html
  [42]: https://gcc.gnu.org/
  [43]: https://en.wikipedia.org/wiki/The_Mythical_Man-Month
  [44]: https://en.wikipedia.org/wiki/Introduction_to_Algorithms
  [45]: https://en.wikipedia.org/wiki/Free_software
  [46]: https://github.com/
  [47]: https://gitlab.com/
  [48]: https://en.wikipedia.org/wiki/Linux_distribution
  [49]: https://www.gnu.org/software/guile/libraries/
  [50]: https://schemers.org/Documents/#intro-texts
  [51]: https://mitpress.mit.edu/sicp/
  [52]: http://starynkevitch.net/Basile/bismon-chariot-doc.pdf