Nick Mudge
3 April 2010
I love the introduction in the book Assembly Language Step-by-Step: Programming with Linux From the introduction:
And some just plain good commentary on programming: Being a programmer is one thing above all else: it is understanding how things work. Learning to be a programmer, furthermore, is almost entirely a process of learning how things work. This can be done at various levels, depending on the tools you're using. These are just tidbits but the introduction as a whole is great.
Comments (7)
20 March 2010
I'm currently working on the logic design of the ALU in the book The Elements of Computing Systems. It has occurred to me that in this ALU and in all combinational circuits or chips that all operations that it can do happen all the time whether you ask for it or not. If you have a combinational circuit that can AND things, can ADD things, can OR things etc. etc. and if you give it some input values then it will perform all operations that it can do on that input data but only provide the output of the specified operation that you ask for (all other operations eventually computing to 0). I've never read anything about this, but wonder about it. It seems that a combinational chip operates as a single whole, doing everything it can all the time but only a part of it being of any use at any time. This concept gives me the idea of a bunch of people all singing in a choir at the same time. The song is the input data. Each person is a different part of the chip performing some calculation with the input data. So some people are singing the song beautifully, some are singing it backwards, some are singing softly and others are singing it loudly. And you the user just select one person to listen to out of this cacophony at any given time -- though everyone is singing it all the time in there own special way. But it is more than that. The parts and functions of a chip do not operate independently, they operate together. Any function is the result of operations of lots of parts of a chip. The output of one part of the chip becoming the input of another. So the cacophony of the chip isn't each part doing it's own thing, it's each part doing things in many combinations with other things. Tons of combinations of logic running, some of which may be of use to the current function asked for, most of which is not. This is much different than the typical programming I'm used to. In programming you make a conditional and then choose logic to peform depending on the conditional. In logic design you perform all calculations and then use conditionals to choose which result you want.
2 November 2009
It seems like I've read a lot about the question "How do you know if someone is a good programmer or not?" And I've been surprised by the answers. I've read good programmers saying that they can't really tell if other potential programming candidates are good or not. I've read about the puzzle and algorithm type questions Google or Microsoft might give. Maybe I am naive, I've never had to hire a programmer, but it sounds kind of easy to me. If you know programming and know good programmers, can't you tell if someone else knows programming and is anything like a good programmer? If I were looking at hiring someone I would get the candidate talking about programming. I don't think it matters that much what the candidate talks about, just get him talking about it and his experiences. In discussing programming does the candidate talk about specific things and examples that demonstrate understanding of practical programming techniques or ideas? Or does he just use buzz words without relation to actual programming? Does it seem like the other programmers in the company will get along with this person? Are his interests in programming a good match for what you want to hire him for? I would also ask the candidate to send me some code he wrote that he is proud of and look it over. I was prompted to write this post from what Bendan Eich had to say about hiring and recognizing programming talent in the book Coders at Work. I really liked what Bendan had to say about the subject. He's the kind of guy I'd want interviewing me for a job.
2 November 2009
I've been reading the new Coders at Work book. It is great. I'm reading it straight through and I'm in the middle of the interview with Joshua Bloch. One really interesting subject that has been brought up in that interview is the trade off of power and complexity in programming languages. It seems that the more power and flexibility you add to a programming language the more complexity you add to it. The more complex a language is the harder it is for programmers to understand it, read it and maintain it. Also the more complex it is the more likely it will be subsetted which can reduce the portability of the language among programmers. One programmer may know one subset of a language and another programmer a different subset. C++ seems a fine example of this. That brings up some interesting questions. What philosophy should you take in creating a new programming language that you simply want to be beautiful and awesome? I know that's pretty general, but I'm kind of general about it right now. I think I tend toward the minimalist language design where you design a small powerful language from which you can build up complexity in different directions. Lispy sounding, isn't it? I wonder what other languages are like that.
31 August 2009
My bookmarking website, Newsconomy, has recently reached over 1000 links to cool things on the web. Mostly things about programming. I think the top 15 most popular tags give a good reflection of the interests of the people that use the site -- well mostly my interests, heh ;)
24 August 2009
I've been reading books on Ruby. I want to know the language really well. I'm that kind of programmer. I love to know the exact details of a language as much as possible. By far the thing I like least about the Ruby language at this point is that it feels like two languages, Ruby 1.8.x and Ruby 1.9.x. Each time I read a paragraph that explains a difference between Ruby 1.8 and Ruby 1.9 I am annoyed. I want to learn one programming language, not two, but which one should I really learn? My answer seems to be both at the same time. Ugh. It seems to be the most sense to really learn Ruby 1.9.x because that's the future of Ruby programming. But from the looking around I have done Ruby 1.8.x is easier for a beginner to learn for various reasons. Ruby 1.8.x is more stable, has more support by libraries, documentation, help and tools. There's less trouble with using Ruby 1.8.x, but it's not the future. This isn't good for beginners who want to learn and start using Ruby. As an example of Ruby 1.9.x unfriendliness, say you are a Ruby beginner and you want to get Ruby up and running at work as fast as possible for a little task that needs to be done. Your computer is running windows so you go to look for a download of Ruby on windows. There's a really nice and fast Ruby 1.8.6 One-Click Installer which sets you up nicely on windows and which likely has everything you need, including an editor. This doesn't exist for Ruby 1.9.x. While having "more than one way to do it" may be the way to go for you depending on if you take the Perl or Python philosophy, I'd definitely say that for beginners learning a language, having choices about what to learn, like which implementation to learn, really sucks. By default newbies don't know anything and asking them to choose when they lack experience and data is frustrating. Perhaps it doesn't really matter much if you use or learn Ruby 1.8.x or Ruby 1.9.x or both, but as a newbie you just don't know. I've seen people ask what programming language they should learn and use for making websites. At one time I had that question. It can be a worrisome question and seem important. In my opinion the answer is that for a new person it really doesn't matter much which language as long as it has some good support for making websites. Ruby, Python, Perl or even PHP are fine. Who cares, it doesn't matter. So in reality the question really isn't very important. And maybe choosing between learning or using Ruby 1.8.x or Ruby 1.9.x doesn't really matter either. I'd like opinions from more experienced Ruby programmers about that. At this point I've sort of arbitrarily decided to go along and use the Ruby 1.8.x implementation of Ruby because Ruby on Rails still recommends Ruby 1.8.x for use with Rails - even though I've heard Rails runs fine on Ruby 1.9. When Rails recommends 1.9.x then I'll switch to that when I can. So in learning Ruby I'm learning Ruby 1.8.x and Ruby 1.9.x and it is annoying. This multiple implementation annoyance also occurs in other programming languages. I noticed that some of the more popular programming languages I can think of tend to have a single, solid, standard implementation that almost everyone uses. PHP and Java are examples. Most prominently I think of Lisp when I think of multiple implementations. Maybe it's not so much all the parentheses that have caused Lisp not to become a popular mainstream programming language. Maybe it has more to do with the lack of a single solid implementation. I also noticed that Lisp seems to be big about written language standards, while more popular programming languages more or less follow a reference implementation as the standard for the language. I've been seeing many articles and blog posts about Clojure. I'm feeling the buzz and excitement about it. Perhaps it is doing so well because it has been created for such a standard and well known and used platform, the JVM. Instead of a Lisp implementation trying to create or grow it's own community (among already existing small Lisp communities), Clojure seems setup to tap the existing very large Java community. That's pretty cool.
14 August 2009
I got a personal reality today of why Larry Wall says the first virtue of a great programmer is laziness. A couple days ago I had the task of slightly changing the format of some CSV files by hand so that a rather inflexible CSV importer could import them into a system. I really didn't want to do this. I felt really lazy. Naturally and automatically I just kept thinking to myself that I really should just fire up Ruby and write a program that reformats these CSV files and I kept thinking of reasons of why I should and I finally convinced myself and that's what I did. Yesterday I saw an unexpected error pop-up in a GUI program I'd been working on that I thought was already fine and tested. Today I kept thinking about how I hate having to test everything every time I make some changes to the application. And then the idea came into my head that I should write automated tests for these kinds of GUI applications -- duh. And I can't get the idea out of my head. I'm so excited about it. Imagine all the manual testing I wouldn't have to do anymore and how much more secure I would feel. I realized today that I have so much fun and love writing programs that tell computers to do work that I don't want to do. Just give me a boring task and I'll turn it into a computer program. Of course I realize that you always have to consider if the overall effort of automating something will expend less energy than the long term manual effort.
1 June 2009
When I first started building websites I learned Javascript and the DOM and that's what I programmed with for client-side browser functionality. When AJAX began to be more broadly known I wrapped my own functions around the XMLHttpRequest object and programmed AJAX functionality. When I began reading more in depth about Javascript, such as reading Douglas Crockford's articles and watching his videos, I became more interested in Javascript and wanted to programming in it more. This is about the time that various Javascript libraries began to become popular and I began to feel some pressure about using them. These new libraries conflicted with my interest in Javascript because I wanted to write in pure Javascript because I liked it. Javascript is so powerful and flexible that it seemed that these libraries could mutate the DOM and Javascript into something different. They became their own distinct things made up from the DOM and Javascript. To illustrate this, the MooTutorial (tutorial for the MooTools library) says this: "With MooTools in your environment, you still write Javascript when it comes to basic syntax, but to a great extent you are NOT writing Javascript anymore; you're writing MooTools." But overall I think the Javascript libraries are a good thing and make sense. There are troubling DOM browser incompatibilities, and the DOM doesn't make it easy to do many things. The libraries bring Javascript and the DOM together into higher cross-browser abstractions to make things easier to do, less verbose and more elegant. These days if I'm going to be doing much Javascript programming I'm going to use a Javascript library. Aren't these libraries in a way acting like a higher-level language based on a lower-level platform specific assembly? So I guess that's why to use a Javascript library these days. Who would write a full blown user app in assembly? Edit: Of course the difference between real assembly and Javascript is that Javascript is interpreted up into abstractions which are then used and interpreted. A high-level language is often compiled down into an assembly (or intermediate) language which is then assembled into machine code.
22 May 2009
10 May 2009
I just watched a few of the talks of the very recent Ruby on Rails conference. They are great. I really enjoyed Robert Martin's talk What Killed Smalltalk Could Kill Ruby, Too and David Heinemeier Hansson's talk Rails 3 ...and the real secret to high productivity.
25 April 2009
I'm a pretty good news junkie, particularly about programming stuff on the web.1 Every once in awhile I really do come across some great stuff. I came across a great piece of material today. Now imagine this: You are a programmer and you love programming and you always want to improve your knowledge and ability as a programmer. It's a hot, boring afternoon and you start wondering to yourself about this. And then you have an interesting idea. What if you just out of the blue email some of the best known great programmers in the world asking them the most important questions you can think of about programming? You are just some guy on the Web that barely knows English, so why not? Polish blogger and programmer Stiff did this and posted the questions and answers on his blog. I love this comment: That's just awesome. I can't believe no one before had this idea. I will bookmark this and study it excessively later. Stuff I Think is AwesomePeter Norvig dislikes Windows, Mac, and Linux. I wonder what operating system he uses. Steve Yegge, Linus Torvalds, David Heinemeier Hansson, Peter Norvig and James Gosling were self-taught in programming even if they studied it in school. Steve Yegge and Linus Torvalds stress communication skill as important for a programmer to have. Math and physics aren't necessarily used that much in programming but are good to know. Steve Yegge _really_ loves math and physics. Tim Bray thought he was going to be a math teacher. Linus Torvalds says that operating system and compiler work is about as close as you can get to playing with hardware without actually designing or building it yourself. Guido Van Rossum uses vi and emacs. All of them except Peter Norvig like and use Unix or Linux.. Steve Yegge said: "Great programmers learn how to program their tools, not just use them." Linus talks about programming his tools. Linus Torvald's favorite programming book is the classic Kernighan & Ritchie The C Programming Language. Bjarne Stroustrup's favorite programming book is also K&R. Programming the 80386 is the hardware/computer architecture book Linus used when he started building Linux. Both Structure and Interpretation of Computer Programs and Programming Pearls were mentioned twice as favorite programming books. Bjarne Stroustrup likes The Dixie Chicks and Beethoven. 1My programming bookmarks
19 April 2009
Newsconomy is a user-submitted news website like reddit.com or Hacker News and a bookmarking website like delicious.com. But it is also different and this post explains how it is different. Newsconomy keeps submitted URLs unique. If someone posts a URL to an article, another user cannot then submit that same URL. The way Newsconomy handles this is a major difference from other websites. Below I show how reddit, delicious and newsconomy handle duplicate URL submissions. reddit doesn't let a user submit a URL to a subreddit if it already exists in that subreddit:
deliciousOf course in delicious duplicate URLs or bookmarks are a major part of the website. delicious keeps track of how many people bookmark items to determine their quality or popularity. The number 72 in the delicious bookmark below is how many times people have bookmarked the item (submitted or saved the URL for their own account in the website).
NewsconomyHere's how Newsconomy handles a duplicate submission:
Buy the item if you want it? WTF?Notice the purple "Buy" link below the title of the item. If you come across an item that you find interesting or like and it already exists in Newsconomy you can buy the item. When you buy the item it moves from the account of the person you bought it from into your own account, and you now have powers over that item. It's like the item is now yours, in the mini world of Newsconomy, and nobody else can have it, unless they meet your price. That's the idea anyway. But Why on Earth Would Somebody Want to Do This?With or without the trading aspect of Newsconomy, it serves as a perfectly good bookmarking website or news website. The trading part of it just serves as a way to make it a little more fun. It is a different way to exchange items between users and show what people are interested in. Someone who might want to try something different might want to try this. Karma Me MarmaNewsconomy doesn't have karma, or some sort of points system. It has something called lambda and it has trading histories. Newsconomy's monetary unit is called lambda and it is what users use to buy items. On the site the λ symbol is a symbol for lambda. Like the $ sign is for dollars. What to Do With LambdaEach user automatically gets a certain amount of lambda when they create an account. This amount changes. Yesterday a new user automatically got 10 lambda. Today the amount is 50.
How to Get Lambda
Note: Any cheating will be detected and all accounts of a cheater will be deleted and the items of the accounts will be given to joemama. How to Find Interesting ItemsCheck the homepage. Right now anytime an item changes ownership it is put at the top of the homepage. New submissions and newly purchased items are put at the top. This may change in the future for new ways of pushing up interesting content. Every item has a "Trading History". The history shows every person who has purchased an item and how much they paid for it or if they were the original submitter. Every item shows how many owners it has had. This information provides good indicators of how interesting an item is. Here's how to see the history of an item: Notice the link "Link" in the image below. Imagine clicking on that. Also notice that the Trading History is 6.
After clicking on that link you are shown the individual webpage for that item that shows its history: More InfoI've used Newsconomy to create a list of links to posts/articles about Newsconomy. More information can be found in those links: http://newsconomy.com/tag/newsconomy
9 April 2009
Every once in awhile I have an interesting idea of some application or software program I'd like to create, but I almost never have the time to immediately do it, and then sometimes later I notice that I forget what the idea was, or why I wanted to do it or what was great about it. So I'm thinking, why don't I just write my ideas down on my blog? Then I could always look back at my blog posts for any ideas when someday I really have time to do something. And plus, it would be fun to write them down here and of course hearing what other people think is always great. I would worry about someone taking my ideas but I've grown to the idea that if you can come up with good ideas in general then ideas aren't that important, what really matters is doing something with them. Any helpful idea I might mention that someone uses to carry through with something deserves full credit and respect for what they create, and of course I'd want to hear about it because it would validate my ideas, and of course I enjoy knowing that I had some slight participation in some new creation. So I'll tell my first idea which was my first idea for a Web application, and I'll tell its story. Way back when I didn't know I was going to be a programmer for a living I had a great idea called Democranet. Basically the idea was that there would be this website www.democranet.com that would contain political articles. Anybody could submit articles and people could vote on whether they agreed with the articles or not. Through a democratic process the website would push up and show the ideas in the world that people cared about most and how people thought the world should be and how it should change. Democranet = Democracy + Internet. I had gotten the idea from reading the book Ender's Game. Some of my ideas of functionality of www.democranet.com were similar to how reddit.com and digg.com work, except the content would be on www.democranet.com instead of linked to all over the web. I think Reddit.com and Digg.com were way less known when I first began working on this, in 2004. Anyway, I was so excited about this idea and this website. But I had no one to build it for me and I didn't know anything about web programming. So I decided to learn how to do all the computer technical work myself. A friend recommended that I get a book on HTML, Javascript and PHP. So that's what I did and that's how I started. I had taken a C programming class in college and knew something about programming (I loved Qbasic in school.) In the process of learning how to build this website and building it I began to realize that I didn't like politics very much, and that grew more and more. After some time I realized that I really liked learning and building the website but that I didn't like the idea of the website anymore. So that was the end of that. I have the old code for it somewhere. I have a visual redesign of the site I was going to implement that is still in HTML here: http://webdescript.com/redemoc/ The Democranet project has been gone for a long time, but it has an issue connected to it that has lingered. At the time I bought the domain names democranet.com, democranet.org and democranet.net. These are really great domain names and I have no idea what to do with them. If you know of anyone that might be interested in buying them for a million dollars, please let me know. What came out of Democranet was that I found that I really liked web programming and it gave me a project to learn web programming with. I eventually got a full time web programming job, which was fantastic for me. Stay tuned for the next idea.
14 March 2009
From Daniel Tenner's post How to recognise a good programmer: Positive indicators:
Sounds like the kind of programmer friends that are great to have.
7 March 2009
Last week Marshall Beddoe organized the first Bay Area Haskell meeting in San Francisco. It was great. I think there were about 20 people there. There's now some talk on the Bay Area Haskell Users Group mailing list (which is brand new, and a spin off from the Bay Area Functional Programmers mailing list) about talks for future Haskell meetings. Dan Piponi mentioned doing a talk on monoids.
7 March 2009
Last week was my last week working at Minnick Web Services, working on and building websites for magazine publishers (and working on eBook registration systems). It was great. I worked there for close to two years. The final large project I had been working on (with a few other people) for quite awhile launched last week. It is the redesigned www.gamasutra.com. News story about it. I bought a car today, a 1994 Honda Civic Del Sol. I actually owned the car for four years, and then sold it to my dad who has had it for three years, and now I'm buying it back. I haven't had a car for close to three years. It is definitely nice to have one again. I have a new full time job working for Inductive Automation/Calmetrics. Industrial automation is a whole new industry for me to learn about and get involved in. I am excited about it. My job starts on Monday. I will be doing programming of course. And I got a new cell phone:)
24 February 2009
Charles Petzold wrote the book CODE The Hidden Language of Computer Hardware and Software which I read and think is very informative. I find his post about Visual Studio interesting: Does Visual Studio Rot the Mind? From the post: Visual Studio can be one of the programmer's best friends, but over the years it has become increasingly pushy, domineering, and suffering from unsettling control issues. Should we just surrender to Visual Studio's insistence on writing our code for us? Or is Visual Studio sapping our programming intelligence rather than augmenting it? This talk dissects the code generated by Visual Studio; analyzes the appalling programming practices it perpetuates; rhapsodizes about the joys, frustrations, and satisfactions of unassisted coding; and speculates about the radical changes that Avalon will bring.
22 February 2009
Andrew Gwozdziewycz wrote a post about PHP 5.3's new feature that allows closures in PHP for the first time and goes on to explain it and how to use it.
I think this is really exciting for PHP programmers who have wished a more functional life. (Like me.) Andrew also wrote a library that uses the new closures functionality to create a lot of common higher order functions and functionality. From his post: Fn.php is an attempt to define lots of useful higher-order functions to PHP, and fix some of the things that are inconsistent with the others. Fn.php already supports the things in PHP that already exist, but adds foldr, compose, zip, andf, orf, not, any, every, curry, I, K, S, flip and a new short hand way to define functions with strings.
22 February 2009
I just watched a very interesting interview of Marc Andreessen on Charlie Rose. Marc Andreeson is one of my favorite technology people. I was lucky to meet him and have a short conversation with him at Startup School last year.
A couple things I didn't know:
Evan Williams is the guy who started blogger.com, but did you know he also started twitter.com?
4 February 2009
I loved this presentation:
Damien Katz on his experience developing CouchDB. |
|