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.
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
Most universities require math as a prerequisite in order to take a class in computer science. Many people never take a class on programming, because they dislike math. I have often wondered if math is truly necessary to be a good computer programmer, since many people never try programming because they are told that it is like math. Most working programmers, however, will tell you that they rarely if ever use math while on the job.
Knowing math certainly helps you understand programming better, but it isn’t necessary for the majority of programmers on a daily basis. You need it if you are doing analysis of algorithms and trying to figure out whether one search algorithm is better than another. You might need it to decide whether to use a linked list, a b-tree or a binary tree to store your data. However, very few programmers today need to do that sort of low-level programming. 99% of programmers let databases handle data storage and searching. Continue reading
I just finished installing Debian Linux (Jessie 8.5) on my Thinkpad T450s and wanted to share my experience so it will benefit others.
Here are the specs for my machine:
- Thinkpad T450s (20BX001PUS)
- Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz
- Samsung K4B8G1646B-MYK0 4GB DDR3 1.35V 1600MHz RAM
(I added an additional Crucial 8GB RAM stick)
- Seagate ST500LM021-1KJ152 500GB 6GB/s 7mm SATA harddrive
- SanDisk U110 16GB M.2 SATA 22x42mm caching SSD
- Innolux N140FGE-EA2 TN 1600×900 matte screen
(I replaced this with a InnoLux N140HCE-EAA IPS 1920×1080 matte screen)
- Intel 7265 Wireless (WiFi and Bluetooth)
- Realtek RTS5227 PCI Express Card Reader
- Chicony webcam
- Validity Sensors VFS5011 fingerprint reader (ID: 138a:0017)
I decided to take the plunge and install CyanogenMod 13 on my Motorola Moto X Pure Edition when I saw that it had now been added to the list of officially supported devices on the CyanogenMod website.
I followed the instructions to first install atb and fastboot on my PC. Since I use Debian 8 (Jessie), this part was easy:
# apt-get install android-tools-adb android-tools-fastboot
Then, I went to the Settings > About Phone on my Moto X and tapped the Build number 7 times in a row to make the Developer options visible.
I recently returned to managing the forum for an open source web application which is used to create custom processes. I have worked on and off for the company that develops this application since 2009, but I have been away from the forum for the last 3 years. Being confronted with the questions and demands of the community on a daily basis gives me a different perspective from most of the other people working in our company.
It is both a burden and a joy to be inundated with technical questions every day. When I login, I see a dozen new posts, all demanding my attention. Most people who post have a gnawing problem they want resolved or a burning question that they have spent the last 20 minutes searching for an answer in our wiki. I take a bit of professional pride in the fact that I often answer the questions on the forum which nobody else can handle, including the people in the support department. After years of answering questions and documenting the software, I have gained a profound understanding of how the application works.