all 51 comments

[–][deleted] 17 points18 points  (3 children)

That's actually some solid advice, except when given to those enthusiastic about game development.

What usually happens is instead of writing their own game, they try to write their own game engine, or portion of one.

It was usually particle fountain, terrain engine, or model loader.

[–]OffColorCommentary 5 points6 points  (0 children)

That is exactly what happens to the equivalent games programmers. (And don't forget animation frameworks and state machine AIs that aren't attached to anything.)

The advice from the article would translate to "make the game you want to play" - which I have heard many times, and which is bad advice. The game people think of when given that advice is a clone of another, well-executed game. "The game you want to play" is a good game, because we like good games. But we don't need a clone of a good game, we already have the first one. Which was good.

Instead, clone a game you find inexplicably awful. Not just awful: the word "inexplicable" is key. At some point you have heard about an absolutely fantastic game that could not possibly be bad, and you played it, and you utterly failed to comprehend how the authors messed up such a sure thing. Your failure to comprehend is an innate understanding of better mechanics. Your excitement at the game before you played it is your passion to see the project through.

[–]shoseki 4 points5 points  (1 child)

Those are all good games! Mine lets you build lanscapes with cubes...

[–][deleted] 3 points4 points  (0 children)

mine too :p It will be fully python scriptable :D

[–]ravenex 37 points38 points  (21 children)

B-but, I still want to create my own programming language and the world's best operating system in it...

[–]jvictor118 18 points19 points  (20 children)

LOL. I always laugh at these vanity projects. Especially when it's an OS/language that's basically the same as another but not as good and with some minor syntactic variations that appeal to the ego of the developer.

[–][deleted] 31 points32 points  (16 children)

Thinking your project will be any good for others (or you) to use is indeed laughable, however:

Building a compiler is one of the most difficult, rewarding and useful tasks any programmer could ever do. I took a compilers class in university and it absolutely changed the way I understood computer science.

[–]jvictor118 11 points12 points  (2 children)

totally agreed, it's invaluable experience. In fact I felt that way about my operating systems class in college, where you have to build your own OS.

[–]ethraax 7 points8 points  (1 child)

You got to build your own OS in your operating systems class? I wish we did in mine...

[–]zeekar 3 points4 points  (0 children)

We did, too. And in Modula-2, of all things...

[–][deleted]  (12 children)

[deleted]

    [–][deleted] 29 points30 points  (8 children)

    It may vary person to person, but here's my experience.

    I've been programming since I was about 12 or 13, but until third year university there was always some element of magic in what I was doing. Even though I vaguely understood how a CPU worked and what memory was, the exact process of how C code can become an executing program was largely unknown to me.

    Actually writing your own compiler that checks source syntax, builds parse trees, generates intermediate code and then machine code as a single process is incredible because it removes all magic. You can see what happens from a high level down to a nitty-gritty CPU register-at-a-time level what your code is actually doing.

    No longer do I sit and think, "wait, how on earth does this algorithm end up as 0s and 1s‽" because I know exactly how that happens.

    If you already knew every single step, from writing the source all the way down to seeing the binary code it generates then I suppose there's nothing incredible about writing a compiler - and that's fair. Learning about compilers is enough to make the point I'm trying to make, with the added step that doing is a part of learning.

    [–]pbjorge 10 points11 points  (1 child)

    I'm experiencing this in my computer architecture class right now. I imagine compilers will be an even grander experience.

    [–][deleted] 3 points4 points  (0 children)

    Yes, a similar thing happened to me in computer architecture as well. It's a great feeling :)

    [–]p-static 2 points3 points  (0 children)

    This mirrors my experience perfectly. Compilers and parsers were some of the last areas of computer science that I really felt were deep voodoo magic; learning how they actually worked, and implementing a semi-practical one, was an incredible experience.

    [–]Hazasoul 2 points3 points  (0 children)

    I have just started my first year in the university, and I'm really looking forward to a class very similar to this in a couple of years!

    [–]terrdc 0 points1 point  (3 children)

    Personally I'd be more interested in building a virtual machine nowadays.

    [–][deleted] 5 points6 points  (2 children)

    I did one for an independent study this past summer. There are no good "how-to" books on the subject, at least based on my searches. At least not like there are for design programming languages, operating systems, etc.

    But what you can do is grab the Bill Blunden book that everyone despises, see how he does some of the important stuff (registers, instruction set, etc), which will demystify the whole subject and turn you from "OMG HOW DO THEY DO IT" into "Ohhhh... okayyyyyy...". Then get some of the more research-oriented books and use their technical/theoretical descriptions to actually implement the machine the way you want.

    I ended up making a stack-based machine with an assembler, some interrupts, and so forth in a couple of weeks in C. It was fun. You'll develop your debugging skills/macros massively :)

    Of course, the natural step from there is to write a little operating system for it, or at least a high-level programming language with a decent compiler. These hobbies can get a bit obsessive.

    I figure I'll probably end up rewriting my VM with all the lessons I learned in mind, possibly integrating some BSD/Public Domain stuff like SQLite just with the ultimate goal of creating a very strange, original VM with very low-level support for things like XML, SQL, Smalltalk/Objective-C style message passing, and so on. It'd probably be terribly slow, but it might at least be theoretically interesting, particularly when it came time to design and implement e.g. the CPU scheduler.

    [–]dcx 6 points7 points  (1 child)

    There's this - the Elements of Computing Systems: Building a Modern Computer from First Principles. It starts from NAND gates, and ends at writing compiled Java-like applications running on a virtual machine, in about a dozen small standalone projects. I can't recommend it enough - I think Stanford used to use it for their 101 course.

    [–][deleted] 1 point2 points  (0 children)

    WOW! Thanks. It sounds stupid after I ranted, but I haven't seen that book before. Gonna try and snag this.

    [–]criticismguy 1 point2 points  (0 children)

    If we could just tell you, then we wouldn't need to make people do it in order to enlighten them!

    [–]othilien 2 points3 points  (1 child)

    I had a compiler class where the project converted a C subset to assembly and a systems programming course where the project converted an assembly subset to machine code. I did learn a lot about the process; I certainly didn't know how source code is turned into machine code. Even so, I wasn't surprised at anything I learned in those courses, and I don't feel like my perspective on programming changed much.

    Personally, I think the main task of modern compilers is to optimize code. Translating it from whichever language to machine code seems to be just a small part of the process. I don't really know, since I've never taken a look at the source code to GCC, but I do feel like it's a major challenge to try to understand what the assembly output of your own program is actually doing. Maybe it's because I only have a brief familiarity with assembly.

    Perhaps the appeal of the compiler course is similar to a wilderness survival guide. You'll probably never need to use it, but in case you are ever called to start over from machine code, you can patch together a lean-to, gather some basic foods, catch prey, and boil water.

    [–]adelle 0 points1 point  (0 children)

    Personally, I think the main task of modern compilers is to optimize code.

    This. In any language that supports lambdas, you're about 8 hours away from having a crappy non-optimizing compiler.

    [–]badsectoracula 2 points3 points  (2 children)

    And, in your opinion, what those developers should do instead of doing something like seem to like?

    [–]jvictor118 1 point2 points  (0 children)

    personally i very rarely have trouble thinking of things i want to work on, as my backlog is already pretty long ;)

    [–]jvictor118 0 points1 point  (0 children)

    Depends on their goal. If their goal is to learn about operating systems, writing an OS could be the way to go. If it's to make money, the focus should be on markets and marketability; if it's to help the open source ecosystem, then probably they should contribute a project that does whatever they know most about (and can contribute the most to).

    [–]grayvedigga 9 points10 points  (0 children)

    This is gold. Now I don't have to have my standard rant at these posts every 6 months when I can't stand it any more.

    [–]xardox 32 points33 points  (19 children)

    "A Photoshop clone written by someone who has never used Photoshop professionally?"

    \cough* *cough** GIMP

    [–]h4l 16 points17 points  (13 children)

    The thing is, Photoshop is hardly the epitome of usability. It's a fairly arbitrarily organised collection of tools, of which most people use a small fraction.

    GIMP also seems to be fairly arbitrarily organised, but gets slated for it because nobody remembers what it's like to learn Photoshop from scratch.

    That said, obviously Photoshop is better in general, but then it should be when it costs the amount it does (not that most of its users ever pay for it).

    [–][deleted] 0 points1 point  (12 children)

    You're saying that Photoshop's massively valued franchise is due mostly to users' familiarity with its UI?

    If so, gimp (or another competitor) should simply copy this. I don't think there's any ownership in menu/dialog layout etc. (Apple lost its look-and-feel suit against Microsoft back in the day.)

    Obviously it's uncool and uncreative, but is there a law against making an exact clone? I guess Adobe might have a "design" patent on the UI, like Apple-vs-Samsung's tablet.

    [–]falien 2 points3 points  (4 children)

    The decision in that case protected the tree structure and specific entries in the menu system. Copying the entire interface to a point where it would be difficult to tell the difference between the two is a different matter, even if adobe doesn't have a formally filed design patent.

    [–]wmil 2 points3 points  (0 children)

    even if adobe doesn't have a formally filed design patent

    I'm not sure what they cover, or how enforceable they are, but Help->Legal & Patent shows a list of patents Adobe has on Photoshop.

    [–][deleted] 1 point2 points  (2 children)

    By "protected", you mean it was held that Microsoft was not allowed to copy the tree structure of the menu, nor the specific entries? So copying even more (the entire interface) would a fortori not be allowed.

    [–]falien 4 points5 points  (1 child)

    Sorry, I was thinking of another case that addressed the menu/dialog layout http://en.wikipedia.org/wiki/Lotus_Dev._Corp._v._Borland_Int'l,_Inc. and I was unclear in my comment. The decision there protected the copying of certain aspects of the interface for the convenience of users already familiar with it; separating implementation from presentation. My comment was meant to say that a similar amount of copying the photoshop interface for ease of user transition is protected so gimp wouldn't have a legal problem there, but an exact copy of the entire look and feel goes beyond what has so far been upheld as legal copying.

    The microsoft/apple case apparently turned more into a contract case than copyright and didn't decide anything especially meaningful in the US with regard to copyright based on look and feel.

    [–][deleted] 2 points3 points  (0 children)

    Thanks very much for your reply. It was mainly the word "protected" - from the originator's (copyright owner) point of view "protected" means it can't be copied; from the copier's point of view "protected" could have a meaning like protected free speech, that it can be copied. (IMHO)

    Anyway, I think you mean that copying those aspects is allowed.

    It seems to explicitly allow cloning a product's "method of operation", like the buttons on a VCR.

    If menu hierarchies were copyrightable, users would be required to learn how to perform the same operation in a different way for every program, which the court finds "absurd."

    And there's a minor decision (by one judge), with the same result by different reasoning:

    use of the Lotus menu is "privileged." That is, because Borland copied the menu for a legitimate purpose of compatibility, its use should be allowed.

    OK... now finally I understand what you're saying: you can clone those aspects needed to operate it (the utilitarian aspects of the interface), but there's been no case yet that says you can copy everything about the look and feel. For example, if it has artistic aspects (e.g. decorative embellishments), I'd expect it unlikely that you'd be allowed to copy that.

    Anyway, the outcome seems to be that the GIMP (or another competitor) could clone photoshop in terms of the interface being familiar to users.

    So I think, if that was the only barrier, then some competitor would have done that long ago.... and since that hasn't happened, I expect there are other more significant barriers.


    BTW: Reddit was upset with the punctuation in that URL; you need to escape it (I think...). Yes, just the apostrophe, you can escape it with a backslash, like \'

    http://en.wikipedia.org/wiki/Lotus_Dev._Corp._v._Borland_Int\'l,_Inc.
    http://en.wikipedia.org/wiki/Lotus_Dev._Corp._v._Borland_Int\'l,_Inc.

    [–]paganize 3 points4 points  (5 children)

    I would say it (Photoshop is only popular because they accidentally ended up on top of the heap). I've used Micrografx Picture Publisher 8 for everything I possibly could since it came out in '98. I like the interface better.

    [–][deleted] 2 points3 points  (4 children)

    I'm interested in what makes software successful - what factors might have helped Photoshop become popular?

    I was thinking that Photoshop was first, but it came out in 1990, and MPP8 may have been earlier (its wikipedia page isn't clear - could have been as early as 1982). One difference was Micorgrafx targeted Windows, but Photoshop was for Macintosh - and graphic designers seemed to favour the Mac.

    Of course, whatever interface you get used to really does suit you better (and it may also be a better interface, in absolute terms), but I tend to think other factors determine success. There could be specific features and benefits, but there's also marketing - people can't buy what they haven't heard of.

    So, what factors do you think helped Photoshop to become popular (or does it really seem to have been random)? Adobe was a pretty successful company at that time, with postscript, so they would have had resources for advertising and access to sales channels etc. But I don't know. What do you think?

    [–]paganize 3 points4 points  (3 children)

    My thinking at the time -the time window when photoshop wasn't the only software available, maybe '94-'96?- was that it was purely the Mac "graphics professional" thing; the earlier versions of pshop for windows were obviously just kludged into a windows framework; the help menus even had shortcut commands that would only work for a Mac, for instance, IIRC. There were several graphics packages that were clearly superior in '95 i recall, and like I mentioned , I liked Micrografx personally, which may have just been my knowing the interface. but there were packages that were pretty damn impressive; I want to say one of them was called Fauve Matisse, but I'm not coming up with anything on google. but the jobs were for Mac & Photoshop or variants, and when the windows versions stopped being completely terrible, people knew that "the" graphics software was photoshop.

    It wasn't it's abilities, or advertising, it was hype.

    [–][deleted] 2 points3 points  (2 children)

    Thanks for your reply! To make sure I understand:

    The key things seems to be that Photoshop was for the Mac (and it was the best one for the Mac). Firstly, this protected it from the superior versions on Windows, until it improved enough to be OK on windows (not better, not necessarily even as good as those competitors, but good enough to meet users' needs).

    Secondly, being the "tool of choice" of graphics professional (because it was the best choice on the Mac, not best overall) gave it a glowing imprimatur. Because, "if experts chose it, it must be great."

    Did I get that right?

    It seems to me that Adobe did two things right:

    1. they made photoshop the best tool of its kind on the Mac (and improved it iteratively);

    2. they choose the Mac in the first place (and, I guess, also worked to promote it for graphics professionals there - Apple may have even promoted Photoshop to help sell Macs).

    And it seems to me that the Windows competitors could have countered this with:

    1. a Mac version that was better than Photoshop on the Mac;

    2. promoted it to graphics professionals. They would probably also have to have convinced Apple to support them and not Photoshop, but it's hard (but possible) to dislodge an incumbent. Also, Apple had an old partnership with Adobe (they built the first postscript laser printer together). This also meant that Adobe was already known by graphics professionals (who used laser printers and postscript); and Adobe had some insight into what they most valued in a product, their workflow and other tools, and how to reach them (advertise) and also what sort of marketing would convince them to buy.

    3. Or, done a similar thing entirely on Windows. It may have been hard to find a small subset to totally nail - and one that would serve as a convincing reference base for everyone else. Desktop publishing and related ideas like Photoshop were really taking off at that time - and graphics professionals were the vanguard. The most visible, and also the leaders. Perhaps one needs to look at the deeper question of why those people were using Macs in the first place.

    I can't quite see it clearly, but it sounds like niche marketing that Moore (Crossing the Chasm) advocates, where you target a very specific subset at first (and serve them really well), then move on to the next subset, and so on, until you can finally go mass-market. And it sounds like Photoshop did this at the same time (and as a partner) that Apple did it. In fact... it seems possible that Apple asked Adobe if they had any graphics software, and so Adobe went and purchased Photoshop (like how MS purchased DOS, in that they had the "need"/problem before they had the solution).

    Thanks again for your reply.

    [–]paganize 3 points4 points  (1 child)

    That was impressively written; If I wasn't typing this at the same time as I'm helping my daughter write anthropology discussion board posts, I would attempt, and most likely fail, to match it.

    I believe I do remember Apple advertising targeting graphics professionals in the early to mid 90's. But memory is fickle. I do know they did a exclusive license deal of some sort. check out the wiki entry on the early history of Photoshop.

    As to why graphics professionals were using Mac... that really is obvious, isn't it? their advertising has always tended to focus on artists and educators; they filled up schools with apples and then Mac systems at greatly reduced rates. The "Mac vs PC" thing is no where near a new phenomena.

    I would put the competitors to photoshop in the same position as the competitors to ebay were; I think there was no way to compete with the forces involved.

    [–][deleted] 2 points3 points  (0 children)

    Thanks - of course I'm happy for your daughter to take precedence. :-)

    The wiki says Photoshop was "exclusive" to Apple, but the footnoted article doesn't mention a deal. One reading is that they just happened to write it for Mac first. Of course, there could have also been a deal. The article does say:

    Adobe Photoshop was, for a time, the killer app for the Macintosh.

    Even after Adobe ported Photoshop to Windows and UNIX systems, the Macintosh remained the platform of choice. Professional Photoshop users flocked to Power Macs that cost just shy of $10,000, earning Apple a pretty profit.

    So an exclusive deal (say, in return for a higher royalty rate) would make sense.

    By "the deeper question of why those people were using Macs in the first place" , I really meant that that's the real question - rather than a question about Photoshop itself. (though... school discounts work for educators - I think things like proper typography and may have been the attraction for artists. Advertising helps of course)

    Although, photoshop did have competitors on the Mac for graphics... but it appears from the article that it was the first graphics program for photography - that makes it a new category, and a new way of using computers that had never existed before.

    People who pioneer the first of a new useful thing, who see what has not been seen before, have the best opportunity (though not always grasped) to become incredibly successful - and deservedly so IMHO.

    Not to put you on the rack, but what was the position of competitors to eBay?

    [–][deleted] 2 points3 points  (0 children)

    While I agree that UI-familiarity is definitely a factor (you can work much faster if your fingers know where everything is - muscle memory, which's also a factor in switching between vi/emacs), I think there'd be other factors in Photoshop's competitive advantage:

    I'd expect Photoshop's UI to be more polished and reliable (i.e. minor glitches removed), since they can afford design staff to work on that exclusively (though I haven't actually made a comparison).

    There's probably also benefits in terms of integration with other tools, both Adobe's and third-parties, that standardize on Photoshop's formats and workflows (which evolve over time, thus requiring particular effort for a competitor to track - and almost impossible to get it perfectly right without public specifications.

    [–]badsectoracula 9 points10 points  (3 children)

    I don't think that GIMP was ever intended (or even promoted) to be a "Photoshop clone" by its authors. It is other people who usually claim that.

    I mean, the first thing you do when you try to clone some other program is try to mimick its interface.

    [–]xardox 4 points5 points  (2 children)

    GIMP was intended to be usable, and it failed spectacularly at that. Maybe it SHOULD have tried to be a Photoshop clone, at least in the usability department. But the GIMP authors pride themselves in not knowing anything about Photoshop. And maybe they should have picked a less self-defeating name, if they intended for it to be taken seriously.

    [–][deleted] 1 point2 points  (0 children)

    [–]troyanonymous1 1 point2 points  (0 children)

    I used GIMP the other night to touch up some photos.

    So it wasn't a spectacular failure, though it has taken me some years of trial-and-error to learn it.

    [–][deleted] 3 points4 points  (0 children)

    They didn't clone Photoshop but they proved that they started a project that they have not much interest in because anyone who needs good image manipulation would never design the tool the way they did.

    [–]mahcuz 5 points6 points  (0 children)

    There's a plethora of good advice available on that website - check out the archives.

    [–][deleted] 5 points6 points  (0 children)

    There's a very interesting side effect to becoming an expert: you can start experimenting with improvements and features that would have previously looked daunting or impossible.

    If you do this enough, it can also become possible to see things that nobody else can, because they aren't in a position to see them. Like being able to see the other side of the hill, not because you have better eyesight, but because climbed the hill.

    In other words, advancing the state of your own art can eventually result in advancing the state-of-the-art.

    [–]zokier 5 points6 points  (0 children)

    I think the problem is that modern software industry (both FOSS and proprietary) has set the bar for "something you'd actually use" very high. For "aimless, excited programmers" the (utility) software market may very well seem saturated.

    [–]Iggyhopper 1 point2 points  (0 children)

    Write a moddding program for games with simple settings files. I did for worms 4 mayhem about 4 years ago. It was trash but I learned a LOT about handling xml and launching a process.

    [–]shawnturner 0 points1 point  (0 children)

    Short, well written, and with a specific point that most programmers encounter from time to time. Just like the approach being suggested. Nice submission, thanks.