Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I have been programming since some years and I won't say its a piece of cake but in this field, you know how to do things. You can always google up resources, tutorials. There are tons of already written code to help you with - frameworks, libraries but if you compare it to other innovation fields like "Electronics".

Its not too easy to get started with, the community might not be too large on the internet, getting the things right plus lets not forget there is nothing to tell you where the error might be. I have wanted many times but not be able to get into, like, building some kind of robot because I don't know how to start.

So my question is that, does programming tends to be easy compared rest of the fields or is it just my interest that makes it easy?

share|improve this question
    
The comments were becoming noise. Please go to the chat room if you wish to discuss this further. –  maple_shaft Jul 2 '12 at 11:31
2  
@maple_shaft and the link to the chatroom where the comments went? –  user1249 Jul 2 '12 at 12:36
    
@ThorbjørnRavnAndersen Unfortunately the comments are lost. We requested a feature to migrate comments to a chatroom however it hasn't been implemented yet. Here is more information: meta.stackoverflow.com/questions/93444/… –  maple_shaft Jul 2 '12 at 13:29
5  
@maple_shaft in test case may I suggest a bit less trigger-happy, if it looses information? –  user1249 Jul 2 '12 at 14:09
1  
almost everything is by nature temporary in the grand scheme of things. –  Kevin Jul 3 '12 at 1:00
show 2 more comments

closed as not constructive by pdr, gnat, maple_shaft Jul 2 '12 at 11:34

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

9 Answers

Programming is easy. Any script kiddie can look up how someone else wrote code to achieve an end.

Being a good software engineer is hard. Proper system architecture for a given problem and development environment (i.e. architecture that you'd use in a C++ project may not hold true for a Python project), along with correct, efficient algorithms (whether pre-baked or custom), design patterns (while making sure that it's all easily extensible) automated testing, etc etc etc is tremendously difficult to put together end to end.

share|improve this answer
4  
+1 for the distinction between programming and software engineering. –  Michael Kjörling Jul 2 '12 at 8:41
1  
Maybe its because I still find myself at the lowest level of software development that I find it not too difficult. Though, sometimes I read blogs pointing out its not MVC, its MVP and its really tough to guess the difference if you are just looking at the framework's source. Maybe, thats where comes the hard part. –  Shashank Jain Jul 2 '12 at 8:44
6  
@Shashankjain No, the difficulty comes when you need to write something that serves tens of thousand of queries, based on hundreds of terabytes of data, with a hard (very much sub-second) response time, in a fashion that it doesn't fail (ideally ever, but at least try to keep downtime, scheduled or not, to under five minutes per year). Then tell me that programming is easy. –  Vatine Jul 2 '12 at 10:43
    
let's be real. even being a good software engineer is not very hard. –  Kevin Jul 3 '12 at 1:01
2  
@Kevin: And IMHO, anyone claiming that good software engineering is not hard, either doesn't know what a software engineer is, hasn't gone through formal training (and doesn't know what it is), or simply hasn't done anything of consequence. –  Demian Brecht Jul 3 '12 at 3:40
show 5 more comments

Writing short, simple, single threaded, sequential, imperative code is easy. However, that's not what real life software engineering is like. There are numerous aspects that requite more skill:

  • real life applications are not short and simple, they are complex, hundreds of thousands lines of code, hundreds of classes with non-trivial interaction. As for comparison with other engineering fields, the example often given is of the most complicated machine ever built — aircraft carrier, which has about 50,000 moving parts.
  • real life system are concurrent and often distributed. Synchronization or asynchronous calls are non-trivial. In fact this is where most newbies make most mistakes. The only other engineering field which deals with similar complexities is telecommunications.
  • it's easy to write a program when you know the algorithm, however in many real life situation, you actually have to know combinations of which ones to use or even invent the algorithm yourself. Doesn't matter how good you code if you don't know what to code.
  • there are many paradigms other than imperative programming, which some people find difficult to understand. These are declarative, pure functional or logical programming.
  • programming is most often done by teams, rather than single person. This is done without strict compartmentalization, thus making coordination of effort non-trivial task.
share|improve this answer
    
I believe i've read that the space shuttle was the most complex machine. Maybe a different metric? –  user1249 Jul 3 '12 at 15:10
    
@Thorbjørn: Probably. The metric that was used for aircraft carrier was moving parts, not parts in general. I don't think space shuttle would have so many moving parts. And it you'd count any kind of parts, like for example all the tiles on space shuttle, then you'd have to count all the rivets in the carrier. Anyway, it's purely illustration example. –  vartec Jul 4 '12 at 8:23
    
Difficult programs don't necessarily have to be large. I remember seeing a project where a guy wrote a genetic algorithm to evaluate efficiency of keyboard layouts. It was only around 1000 lines of C code, but not something you could just google. –  R0MANARMY Jul 8 '12 at 14:48
    
@R0MANARMY: hence the the 4th point. –  vartec Jul 8 '12 at 15:33
add comment

Building "some kind of robot" takes considerable knowledge about what you want to achieve, what building blocks to use and how to put them together.

Building a database server with a SQL interface, network connectivity, multiuser capability, proper ACID, good concurrency properties and so on and so forth takes considerable knowledge about what you want to achieve, what building blocks to use and how to put them together.

You don't just slap complex software together, just like you don't just slap complex hardware together. You have to start small (remember how proud you likely were the first time you got the computer to do something like ask you for your name and then print it back out?) and only then expand your knowledge. It's easy to make a small piece of software that does something semi-interesting, but it's also not very hard to do the same with electronics.

So, I would argue that there is really very little difference between the examples you list, only between what appears to be your expectations on where to start. The only real difference I can think of is that with hardware, if you miswire something you risk letting the magic smoke out, whereas with software you are unlikely to get more than a compile-time or run-time error message, which means that with physical hardware, you have to be more careful before you apply power (akin to hitting the "run" button).

Also, there is electronics simulation software out there, where you sit in front of the computer to draw up a circuit diagram, hook up a power supply, and click the equivalent of "run". I've used such software something like ten years ago; it would tell me if I had made a mistake that affected the electrical viability of the circuit, such as forgetting a ground connection somewhere, and it let me see how the circuit behaved (including changing the rate of time - no need to wait an hour to see what happens then, just set the time acceleration to 60x and wait one minute). Several such software packages are sophisticated enough that you can go pretty much from idea to ready-to-make PCB without having ever gone near a soldering bench or a wire board. Granted, they aren't cheap, but then again neither is something like the professional versions of Visual Studio.

share|improve this answer
    
Building a database might not be easy at all. But I can always take help of StackOverflow if I run into problems. I am sure if a google I will find many people who ran into the same problem but what happens if your circuit just doesn't work? –  Shashank Jain Jul 2 '12 at 8:16
1  
@Shashankjain Hi! Maintaining a database is much easier than building a database. You can google only for information not for architecture or models. Programming is a silly, simple job at the modular level. But when you start constructing a software from these modular pieces, then the real problem starts such as combinatorial explosion, optimal vs feasible solutions, trade-offs (and in a enterprise setup, deadlines and delivery). Physics, Maths et al are built upon a set of robust, universal rules. Software isn't; hence it is inherently complex. –  Ubermensch Jul 2 '12 at 8:28
    
My example is not about building a database, but rather building a database engine. Certainly a database can be complex as well, but in very different ways. And a database engine is certainly not the only or perhaps even the most complex piece of software. –  Michael Kjörling Jul 2 '12 at 8:29
    
@MichaelKjörling Hi!Michael. The comment is towards Sashank for use of google and stack overflow to overcome problems. I believe SO could be used when you have a definite plan about what you are doing and has just hit a roadblock and Google is a source of information not knowledge. –  Ubermensch Jul 2 '12 at 8:32
1  
at simulation of electronics: Hmm.., So in this modern era, we have just better tools for everything even electronics. What requires innovation is just a creative mind and a genuine dedication to field... –  Shashank Jain Jul 2 '12 at 8:50
show 1 more comment

Programming is different from many other disciplines in that it allows wide-spread reuse of components. If you want to build a chair, you will have to learn how to build a chair. Carpenters, professional or hobbyist, may give you advice and show you how to do it, but you still need to build the chair yourself.

In programming, you can often find ready-made solutions for common problems, free to use, peer reviewed and time-tested. However, if you can't find such a solution, then it becomes challenging. Sometimes, you just have to find a way to plug existing modules together to achieve your goal. Other times, you may have to invent a new, specialized algorithm to fulfill your requirements.

In any case, programming a non-trivial system always has its pitfalls. Seemingly small design decisions early in the process can grow to unsurmountable problems. Foreseeing those problems and eliminating them before they grow too large is one of the main challenges in programming for me.

share|improve this answer
2  
Arguable carpenters and other artisans also rely on tools, building blocks, blue prints and design patterns. I'm not sure that's the greatest comparison. –  haylem Jul 2 '12 at 8:26
    
Nope. Those tools are more similar to our compilers, IDEs and build systems. I'm talking about the components of the final product. Would you use a hammer as a chair leg? –  Benjamin Kloster Jul 2 '12 at 8:29
1  
no (and that's not at all what I implied), but I would use a precut piece of wood, which is a building block. And I would use screws and nails, which I wouldn't exactly describe exactly as "tools". –  haylem Jul 2 '12 at 8:34
    
@Benjamin in emergencies, yes :) –  user1249 Jul 3 '12 at 15:11
add comment

I find programming very complicated when you think about big picture of software development. Architecture, strategy, communication, management, programming, team mechanics if you sum up everything it gets really nasty :)

Programming as a lone skill is not soo hard, but you also have to take into account all the things and problems mentioned above.

share|improve this answer
add comment

You will understand the difference once you start selling your application or code. Code limited to your home laboratory always looks easy and best.

share|improve this answer
add comment

Nothing will be easy work to do each and every thing will have its own difficulties we must love the work what we are doing that it self works also with the programing. If we love it it is easy other wise it is horrible.

share|improve this answer
add comment

Adding to the awesome answers already posted, I think what you have interest in (and also successful at) seems very easy. Like Roger Federer will find tennis easy compared to other sports. It's good you find programming easy but others may (and do) find it difficult.

share|improve this answer
1  
it's also true that someone may find something easy and still be a rank novice. Which leads to the question, "if it's so easy why aren't you better at it?" –  Kevin Jul 3 '12 at 1:06
add comment

Depends on what other fields do you consider.

Programming of large software systems (large enterprise software for example) is hard because of the complexity; it is started from very simple things things (numbers, strings & other simple objects) and composed in such way that the end product is a very, very complex system that is impossible to be understood by a single person.

A real difficult field i my opinion is biology, where there are both complex things to start with (proteins, cells and others) which composed together yield very complex systems.

share|improve this answer
    
And somehow, those very complex systems combine to form the above answer on a Stack Exchange site. –  Michael Kjörling Jul 2 '12 at 11:48
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.