Ask HN: Have I lost my skills in programming?
I&#x27;ll respond and try to <i>clean up</i> the issue:<p>Broadly my guess is that the problem is too much advice on how to program, like being told to put your nose to the grindstone, shoulder to the wheel, and ear to the ground and then work in that position!<p>First, on how we can be &quot;confident&quot;, let&#x27;s make a few very simple points:<p>In some subjects, we do have some solid information.<p>E.g.:  (1) If you want to be sure of the Pythagorean theorem, then there are many clear, short, rock solid proofs that will remove all doubt.  (2)  If you want to know when the next solar eclipse is, then basic physics from Newton&#x27;s laws can give you an astoundingly accurate answer years into the future.  (3) If you want to transmit a billion bytes of data over the Internet, then from coding theory there are some codes that can do really well at error detection and correction.<p>But in some subjects we don&#x27;t have such clear, solid answers.<p>E.g.:  (1) I recall very well that in high school I didn&#x27;t know with much confidence what a girl I was dating thought of me, and I suspect, of course don&#x27;t know for sure, that I was not nearly the first such boy!!  (2) Tough to know what the US Federal Reserve will do to interest rates in 2019.  We can&#x27;t predict interest rates nearly as well as solar eclipses.  Instead, interest rate predictions are a definite maybe.<p>Second, as an example, I&#x27;ll outline how I became a &quot;confident programmer&quot;:<p>I&#x27;ve been programming for a long time, back to Kemeny-Kurtz Basic, assembler, Fortran IV, Algol 60, PL&#x2F;I F level, C, ....  I skimmed through the first three volumes of Knuth&#x27;s <i>The Art of Computer Programming</i>, paid close attention to radix sort, heap sort, and AVL trees, and learned a lot of applied math and the associated computing. In six weeks while teaching the business school course in computing at Georgetown University, I designed, wrote, and ran some software to schedule the full, planned fleet at FedEx, pleased the BoD and two experts from BoD Member General Dynamics, &quot;solved the most important problem facing the start of FedEx&quot; (F. Smith, founder, COB, CEO), enabled funding, and saved the company.<p>My Ph.D. dissertation was in stochastic optimal control with computing, e.g., some algorithms to make the computing faster, from about 64 years down to three minutes.<p>While working in an AI project at IBM&#x27;s Watson lab, I cooked up some applied math and algorithms to do better than our AI work.  I programmed the algorithms and published my work in <i>Information Sciences</i>.<p>I also taught computing in the MBA program at Ohio State University, was named Chair of the college computing committee, etc.<p>And there was more.<p>I was self taught.  E.g., while I was teaching computing at Georgetown and saving FedEx, I&#x27;d never had any courses or instruction in computing. Taught courses?  Yes.  Taken courses?  No!   I still have had essentially no instruction, and have had no meaningful instruction, in computing.<p>Still, now I&#x27;m deep into my startup:  The software is 100,000 lines of typing, about 24,000 programming language statements.  I&#x27;ve plugged together my first server, based on an ASUS motherboard, an AMD FX-8350 processor (8 cores, 4.0 GHz standard clock speed), 16 GB of ECC main memory, etc.<p>Third, during this work, I heard about various lessons on how to be a better programmer.  So, sure, I read <i>The Mythical Man-Month</i>, read lots of stuff about the challenges of writing and documenting <i>good</i> code, saw the interest in APL programming, Prolog and <i>logic</i> programming, the roles of <i>block structure</i>, exceptional condition handling, and scope of names in PL&#x2F;I programming, saw the rush for Ada programming, saw <i>structured programming</i>, saw object oriented software design and programming, read about Backus and <i>functional</i> programming, did a lot in AI <i>rule based</i> programming, of course studied SQL programming (there&#x27;s some of it in the code of my startup), etc.<p>Once I was flatly told that since I had done some Fortran programming, my brain &quot;was forever damaged&quot; for programming.<p>Lesson:  There is a LOT of advice on programming.  Yes, that advice is maybe more solid than predicting interest rates in 2019 or what women&#x27;s Paris fashions will be next fall but, IMHO, not much more solid.  Or, advice on programming is nowhere nearly as solid as, say, proofs of the Pythagorean theorem or using physics to predict solar eclipses.<p>In particular, it&#x27;s possible, and maybe the best way, to do well at programming while essentially ignoring all the advice and just being self taught.  Sorry &#x27;bout that:  Such a remark violates some politically correct norms, calls into question the importance of a lot of revered, respected, and coveted undergraduate teaching in computer science, and will rub some fur the wrong way.  Sorry &#x27;bout that, but I&#x27;m trying to respond to the OP.<p>IMHO, the important and really useful parts of programming remain a simple subject.  Here are the high points:  We (i) look at <i>requirements</i>, inputs, and outputs, (ii) get a high level design, likely exploiting the principle of divide and conquer, (iii) find needed algorithms, (iv) define storage, (v) write expressions to do the data manipulations, (vi) wrap the expressions in If-Then-Else, (vii) as a case of divide and conquer form those lines of code in functions&#x2F;subroutines, (viii) handle exceptional conditions, (ix) design the code so that it will be easy enough to test, (x) test the code, (xi) document the code following &quot;Given the code, without documentation only the programmer and God understand it; six months later, only God.&quot;  So, write the documentation to explain, clearly, all the important thinking in the work.<p>I&#x27;m confident you can do (i) - (xi), and in that case you should be a &quot;confident programmer&quot;.<p>My view is that the most difficult part of programming and the worst bottleneck to progress in computing is working with tools, e.g., object oriented programming classes, APIs (application programmer interfaces), USB (universal serial bus), etc. that way too often are not clearly documented.  E.g., yesterday I was struggling with lack of documentation of Vcore, one of the motherboard voltages.  What devices use Vcore?  What Wattage is needed?  What parts of the power supply provide that voltage and Wattage?  But no way is poor documentation about tools a programmer is to use the fault of the programmer.  In response, one approach for a programmer, a &quot;confident programmer&quot;, is to stay close to old tools, known to be solid, and with many good examples of usage and maybe even some good documentation.  E.g., for my first server for my startup, I deliberately went with a motherboard with an old BIOS instead of the newer UEFI.<p>Most of these lessons are much the same as or follow closely from lessons in projects going way back.  E.g., the technique of divide and conquer is really old.  How old?  For that technique and more, the <i>art</i> goes back at least to military campaigns, designing ships to travel the oceans, construction of palaces, churches, and monuments, e.g., the Pyramids back 4000+ years.<p>So, for the OP:  If you got started in programming, then there should be no good reason for you not to be a &quot;confident programmer&quot;.  Maybe all you need is what was passed out in the classic movie <i>The Wizard of Oz</i>.  Or, I hereby confirm on you the title of Confident Programmer First Class with all the honors, rights, and privileges thereunto appertaining.  Congratulations, and happy confident, programming.