On the other hand, I still fondly recall how my mind was blown by the concepts I learned when I first learned programming. It was my senior year in college and I picked up the book, the New C Primer Plus, 2nd Ed. by Mitchell Waite and Stephen Prata while Christmas shopping in 1995. I stumbled across it in Circuit City on the bottom shelf below all the shrink-wrapped software. I recall that it was sitting all alone on the shelf–all the other things around it had been snatched up by the Christmas rush. It was a throw-back to the time when learning how to use a computer still meant learning how to program it, but most people rushing through Circuit City had overlooked it. At the time, people told me to learn a newer language like Java or Visual Basic, but I had become fascinated by how computers work, and wanted to learn the gritty details of a low-level language like C. I spent the next 3 weeks reading 700 pages of code examples in utter fascination. The book taught me dozens of new concepts. At the end of each chapter, there were exercises to do as homework. Since I didn’t have a C compiler, I wrote out my code examples with pencil and paper, not really knowing if they worked or not, but simply enjoying what I was learning.
When I first learned programming in the mid 90s, everyone told me to learn Java, since it would be the wave of the future. Java imposes a performance penalty compared to traditional compiled languages like C, C++, Fortran and Pascal, because its code is translated into bytecode that runs in a virtual machine. The feeling at the time was that the extra processing and memory required to run the Java virtual machine would make little difference in the long run since computers were forever getting faster and more powerful. A few more iterations of Moore’s Law would obviate the need for compiled languages, since the difference in speed would soon be imperceptible to most humans.
Java was considered the best language, because it was designed to “write once, run anywhere,” which seemed wise considering how the world was moving from minicomputers with terminals to networked personal computers (PCs). When I first arrived at university, the entire campus ran on VAX terminals, although some students brought their own PCs to use in their dorm rooms. By the time I graduated 4 years later, almost the entire campus had switched to networked PCs. I had a job staffing the college computer lab and I fondly recall the excitement on campus when PCs replaced the monochrome VAX terminals with their pea green screens. There was a raging debate at the time whether PCs should use an operating system from Microsoft or Apple. My friends in the computer lab predicted with all the confidence of sages that Java was the future since it could be used to create desktop applications that would run in Windows 95, Mac OS 7 or even Solaris. Everyone knew at the time that desktop applications running on PCs was the future of computing and we all wanted our software to be able to escape the clutches of Microsoft, who was the geek’s great Satan.
Most of the time Linux “just works,” but sometimes all the pieces don’t play together nicely. After installing the Rust compiler, I couldn’t get it to run without typing out the full path to the program. If you are coming from the Windows world, this is the expected behavior because Windows is a brain-damaged OS, but in the Linux/UNIX world we expect commands to work everywhere without including the path. So I filed a bug report with the LightDM display manager and with the Rust compiler to ask them to set the PATH correctly:
My prediction is that LightDM will ignore my bug report (since it is developed by Ubuntu which tends to ignore bug reports) and the people at Mozilla who develop Rust will say, “It’s not our problem if LightDM doesn’t want to conform to the convention of putting session configuration in $HOME/.profile.”
And I will get annoyed that I just wasted an hour of my time tracking down this bug and reporting it, rather than getting some extra sleep that would make me a much happier camper tomorrow.
The Mozilla Foundation has been developing an exciting new programming language named Rust, that is designed to be a low-level language capable of matching the performance of C/C++, but with the safety of Java, the concurrency of Go, and many of the modern features of high-level languages like Erlang, Haskell, and OCaml. After reading the documentation and playing with bits of the language, I find myself struggling with some of the concepts of the language. Continue reading