I frequently recommend that people avoid using Ruby on Rails. Every time I do this, I get blowback from people who are using Rails professionally, and who have various reasons that they justify their continued used of Rails.
Since it comes up so often, I’ve decided to distill all the various reasons not to use Rails on one page. Feel free to add more in the comments and I’ll try to integrate them as I have time1.
I originally answered the question, “What are your ten laws of programming?”, on Quora in 2019; I’m copying the answer here for posterity:
Why is it always 10? Why not 7, or 13, or 121? And is that binary 10 or decimal? Or maybe hex 0x10?
Ignoring the specific number, here are some “laws” of programming that I live by:
Understand the abstractions you’re working with, and at least a level or two below where you’re working.
I was presented with the following question on Quora:
A bright high school student tells you they want to be a software engineer. What advice do you give them?
My answer:
Don’t wait. Start learning now.
Don’t be afraid of the many languages and frameworks you could learn. Just pick one and start. The choices may seem overwhelming, especially when you don’t know the difference between the various approaches people talk about online, but most of what you learn on your first language will make the next language easier to learn.
Asking For Money I’ve talked some about contract negotiations and what to put into a freelance contract, but that’s not a problem until after you’ve convinced someone to pay you a reasonable amount of money to solve a problem they have.
So how do you come up with the correct amount of money to ask? This is a tricky question.
Calculating the Estimate or Fixed Bid It takes some time to come up with a good estimate for how long a project will take.
This is a retelling of a story that I read for the first time many years ago. The last place I found a link to it was on a Quora blog, but that link is now dead, and I can’t find it anywhere else online, so I’m rewriting it as best I can here from memory.
Yes, I’m aware that it’s no longer considered cool to refer to “ninja” developers, but this story doesn’t make as much sense otherwise.
So I write a lot on Quora about why I like static types. I’ve also written about them on this blog. But I see a lot of responses that indicate to me a profound misunderstanding about what “static types” really means.
In the context of JavaScript vs. TypeScript in particular, I think that people who haven’t yet extensively used TypeScript think that the difference is about the compiler telling the difference between strings and numbers.
So you have a client who wants to pay you to do something. Awesome! That’s the hardest part.
Now comes the “easy” part; negotiating what goes into the contract. I just wrote a short article on what should go into a freelance contract, but a couple of questions came up as a result of that, and I wanted to talk a little bit more about the overall process, along with a few things that shouldn’t go into your contract.
I recently wrote on Quora about a clause that I use in my contracts as a freelancer. I’ve had a couple of requests for more details.
My contract is a collection of clauses I mostly put together from public sources and that my attorney wrote; I couldn’t even tell you where every clause came from. As such, I can’t just post the whole thing – much of it is protected by copyrights, and while I have the right to use it myself, I don’t have the right to publish it.
Developers and Categories There’s a common meme in web software development circles: Frontend developers are perceived to have less status than backend developers. This shows up in a series of questions on Quora, for instance. 1 I’ve tried my hand at answering a couple. 2
Good front end development today, though, can actually be harder than back end development. At the extreme end of the spectrum, it can require a much stronger developer.
I’ve been thinking a lot recently about what it means to be 10x. I answered a question on Quora about whether some developers might be not exactly 10x, and after thinking about it I came up with an answer that wasn’t what I’d expected to say.
In summary, I think that:
The short term multiplier can be anywhere from 0.5x to 20x or more, comparing the same two people. The higher multipliers are a consequence of the complexity level of the task.
I’m reprinting this classic here since the links I’m finding online are disappearing, and I think it’s an important bit of programming wisdom that I’d be sad to see disappear from the Internet. – Tim Mensch
The Parable of the Two Programmers Neil W. Rickert Once upon a time, unbeknown to each other, the “Automated Accounting Applications Association” and the “Consolidated Computerized Capital Corporation” decided that they needed the identical program to perform a certain service.
Over the years I’ve noticed a lot of patterns when I go to help people debug their code or server architectures. And I’ve helped hundreds of people debug their code. Sometimes the advice I give can literally be reduced to a standard laundry list of “Have you tried X?” questions, many of which aren’t even specific to the domain or problem at hand.
Here are some of those generic suggestions, along with extra details about how to apply them to general errors.
While I alluded to this in my article on why I gave up on Lua, I feel there’s a lot more to be said about the positive side of using a statically typed language for all non-trivial development.
First, what do I consider to be non-trivial? Probably anything over about 100 lines of code total. You can get benefits from static typing for even really short modules of only 10 lines, but there is a cost in setting up a compiler compared to using a completely dynamic language.
Last night I went to check on this blog, and Drupal was dead. It was showing a message saying “something is wrong with the site” with no particular explanation as to why it was down. Odds are good that someone attempted an exploit that was only partially effective, enough to crash the service without being enough to take it over completely. This was the last straw. Out with Drupal and all of its security holes!
Tim Mensch is a consulting programmer, business advisor, and technologist who has been creating games, apps, and products for clients for over thirty years.
He’s worked for Lucasfilm, Amazon.com, Activision, Disney, and a long list of start-ups, bringing products from idea to functional.
He lives near Boulder, Colorado with his family, and currently runs https://coderescue.com.
As of May 19th, I've unsubscribed from the Lua mailing list. Thus ends an era.
For years I have been a strong proponent of Lua. I've used it in my games, and I've used it in servers with Nginx. I've used Lua to write command line tools, and I've used it to write extensions for existing games. Lua is a great language to play with for a number of reasons. The syntax is easy to learn and somewhat forgiving.
I was given a review copy of the Direct 3D Rendering Cookbook by the publisher, Packt, and over the course of a couple of plane flights I’ve had a chance to look it over. As a basic introduction to how DirectX 11 usage, it seems great so far. I’ve used previous versions of DirectX, so I can’t comment on how clear it would be for a complete beginner, but for someone who already knows the basics it was certainly very easy to follow.
An article on Penny Arcade talks a bit about why Days of Wonder decided to change their Apple-only policy and start developing on Android.
I feel like they spend a lot of time talking about parts that aren’t relevant, though. They mention “fragmentation,” and then imply that “oh, now it’s fixed!”, when the truth is that there are still lots of tablets that Ticket To Ride will run on that aren’t one of the few mentioned in the article.
For the first time, I’m trying to put a lot of effort into social media. I’m posting on Facebook (which cross-posts to Twitter). I’ve updated my company blog. I’m posting on Google Plus, even, and starting to dig into other sites relevant to the game that I’m putting together.
I’ve been on this project almost full time for days now, and not one line of code has been written for it.
After months of spending time at others’ beck and call, working on various consulting gigs, I’m finally back in the development chair. At least almost. I’ve spent over nine months working on contracts, refilling the war chest. I sold my house and bought a cheaper one to get out from under a mortgage, so I’d be better able to pursue my own projects for longer without active income.
And I’m finally, finally pursuing my “dream game” project.
Edit on Jan 24, 2012: A new Lua binding generator now takes top honors.
I write game libraries first, and then games. It’s in my blood, or at least I’m in a rut. One way or another, it’s a habit that I find hard to break.
And I’ve become a major fan of the programming language Lua; it’s fast and small and easy to bind to C or C++. Or so I thought…
A while ago I wrote about the troubles I was having with Lua bindings. Some were too heavy, some were too flaky.
And after spending all that time reviewing them, I ran out of time and had to pick one – and I made the mistake of picking a flaky one, with the result being that I have wasted a LOT of time over the past year fixing corner cases and issues with it.
On TechDirt today there is an article claiming that bloggers should be protected as journalists. But I tend to be more in agreement with Ars Technica on the topic, which notes the judge referenced more criteria than whether the “blogger” calls herself a journalist.
As much as I want serious bloggers to be covered by shield laws, I do think that there should be some discretion into who is considered a journalist.
I’ve been seeing bloggers panic about an alleged change with the new Google Android Developer Agreement. As was pointed out by one developer on Twitter, the text hasn’t changed.
So what has changed that they want us to agree to? I decided I wanted to find out. Looking at the page in archive.org (thanks for the idea, Nathan), I compared the version from May 1, 2011 with the one available on the site today.
Today we were enjoying a nice, warm day that made it seem like summer hadn’t really ended…until about 2:16PM, when all of a sudden someone turned on the wind, which started gusting at over 30MPH, and which brought with it some clouds and fog that spattered rain all over us. So much for summer. :)
In other news, they had to remove a mountain lion from a student apartment complex. Apparently it was pretty scared of the students who were standing up on a bridge nearby to take pictures of it.
As many people know now, web sites can put small packets of information on your computer, called “cookies,” and they do this for various reasons. Sometimes it’s to save your password on a site, but sometimes it’s to track ads you’ve seen and products you’ve purchased.
A lot of people seem to want to know how to see what “cookies” have been placed on their computer, and what pages have placed the cookies there.
The big news today is that Nokia and Microsoft have created a partnership, and that Nokia will start selling smartphones based on Windows Phone 7 (WP7).
As an app developer, I think this is a terrible idea. Having to support two phone ecosystems is annoying enough. If WP7 actually does manage to get any market share to speak of, I will have to consider porting my games to a third platform – one that, at the moment, doesn’t support native development, so instead of just having one set of source code that I can port to multiple devices, it would take almost a complete rewrite.
Ahh, the Android build process is always fun.
In my previous blog post I talked about how huge LuaBind and OOLua++ were. Apparently I needed to do a clean build, though, because now I’m getting different numbers I’m an idiot. The new numbers I was seeing was because I was reading their sizes wrong. Divided by two. I’ve updated the incorrect numbers in the previous blog entry. I looked at it again because, frankly, I didn’t believe my own numbers.
Barring any remaining issues, I’ve finished my first Android game, so it’s a reasonable time to reflect on what I’ve learned.
Android is not an easy platform to develop C++ games on; they originally designed it to be Java-based, and there are dozens of pitfalls that can even trap an experienced developer. But I decided to take that path anyway, and now I have the skeleton of a cross-platform game library.
No promises yet as to ongoing content here, but I wanted to set up my personal blogging space so that I at least have the option of writing blog entries.
We’ll see how things happen as time moves on.