{"tag":"maintenance","articles":{"blog\/technology\/coder-vs-developer":{"key":"blog\/technology\/coder-vs-developer","type":"article","published":true,"meta":{"createdAt":"2017-09-01T18:30:13+02:00","publishedAt":"2017-09-26T18:29:00+02:00","group":null,"category":"blog","subcategory":"technology","slug":"coder-vs-developer"},"content":{"en":{"slug":"coder-vs-developer","title":"Coder vs developer","intro":"\u003Cp\u003EProgramming isn\u2019t that hard. Really. With enough time and determination, \u003Cem\u003Ealmost everybody\u003C\/em\u003E could write some useful code. The Internet is full of tutorials that teach you programming from scratch, full of people who faced the same problems you do, full of people who solved those problems and shared their solutions for you to use, and finally full of free libraries that you can \u003Cem\u003Ejust use\u003C\/em\u003E. All you need to do is learn some tools, google your problems and put together pieces of code that you find.\u003C\/p\u003E\n\u003Cp\u003EBut if it\u2019s not a black magic, not a secret knowledge, then why are software developers \u003Cem\u003Eso\u003C\/em\u003E well paid?\u003C\/p\u003E\u003Csvg xmlns=\u0022http:\/\/www.w3.org\/2000\/svg\u0022 style=\u0022display: none;\u0022\u003E\u003C\/svg\u003E","content":"\u003Cp\u003EProgramming isn\u2019t that hard. Really. With enough time and determination, \u003Cem\u003Ealmost everybody\u003C\/em\u003E could write some useful code. The Internet is full of tutorials that teach you programming from scratch, full of people who faced the same problems you do, full of people who solved those problems and shared their solutions for you to use, and finally full of free libraries that you can \u003Cem\u003Ejust use\u003C\/em\u003E. All you need to do is learn some tools, google your problems and put together pieces of code that you find.\u003C\/p\u003E\n\u003Cp\u003EBut if it\u2019s not a black magic, not a secret knowledge, then why are software developers \u003Cem\u003Eso\u003C\/em\u003E well paid?\u003C\/p\u003E\n\u003Cp\u003EIt all comes down to the issue of \u003Cstrong\u003Emaintainability\u003C\/strong\u003E. It\u2019s not that hard to write a script that \u003Cem\u003Eworks\u003C\/em\u003E. But it requires a lot of experience to write something, which \u003Cem\u003Ecan be easily modified\u003C\/em\u003E.\u003C\/p\u003E\n\u003Cp\u003EProgrammers spend more time reading code than writing it. Seriously. Sometimes we spend the whole day digging through layers of code in search of a root cause of some bug, only to discover that all you need to fix it is to slightly modify a single line of code. (Btw, that\u2019s one of the reasons one shouldn\u2019t pay programmers \u003Ca href=\u0022\/blog\/rewarding-for-loc\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-computer-speaker\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E per line of code\u003C\/a\u003E).\u003C\/p\u003E\n\u003Cp\u003EWhen I look at some code I wrote just four years ago, I\u2019m terrified of it. If I had to modify something non-trivial on that website, I think I would have to get drunk first. It\u2019s a mess. No separation of concerns, no layers of abstraction, sensitive configs in PHP files, templates mixed up the the business logic \u2013 not only is it objectively \u003Cem\u003Eugly\u003C\/em\u003E and \u003Cem\u003Eunreadable\u003C\/em\u003E, but most importantly, it takes a lot of time to understand what the code does, how it does it and how to change it best.\u003C\/p\u003E\n\u003Cp\u003EThere is also a lot of \u003Cstrong\u003Eduplication\u003C\/strong\u003E. I wrote some code to handle a post form in the admin panel. Then copy-pasted it and adjusted to handle an image form. Then the same for a comment form. And some others. Now if I had to change something regarding the form handling generally, I\u2019d have to do it in all of those places (knowing the whole application, and trying not to forget\/miss any of them). If only I had that shared logic separated into any kind of abstraction, I would only have to update that abstraction, so that every form which uses it would just switch to the new version.\u003C\/p\u003E\n\u003Cp\u003EThat code would also cause me trouble regarding \u003Cstrong\u003Ecooperation\u003C\/strong\u003E. Not only because I would be ashamed to share my shitty code with anyone. Mostly because the experience of my shitty code would be even more shitty for someone who didn\u2019t write it. If I had written \u003Ca href=\u0022http:\/\/blog.cleancoder.com\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E cleaner code\u003C\/a\u003E, followed \u003Ca href=\u0022https:\/\/symfony.com\/doc\/current\/contributing\/code\/standards.html\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E styling conventions\u003C\/a\u003E and \u003Ca href=\u0022https:\/\/en.wikipedia.org\/wiki\/SOLID_(object-oriented_design)\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E SOLID principles\u003C\/a\u003E, wrote automated tests, used an \u003Ca href=\u0022https:\/\/en.wikipedia.org\/wiki\/Model%E2%80%93view%E2%80%93controller\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E\u003Csvg class=\u0022icon\u0022\u003E\u003Cuse xlink:href=\u0022#light-link\u0022\u003E\u003C\/use\u003E\u003C\/svg\u003E MVC\u003C\/a\u003E framework \u2013 then every experienced developer could just jump into the project without much preparation, knowing where to look without having to know the whole project. But in case of my shitty code, they would have to suffer through a lot before being able to work on it. Plus, they\u2019d have to know Polish \u2013 for some reason I used it to name some variables and templates... \ud83e\udd26\u003C\/p\u003E\n\u003Cp\u003EThat\u2019s why I\u2019m distinguishing between \u003Cstrong\u003Ecoders\u003C\/strong\u003E and \u003Cstrong\u003Edevelopers\u003C\/strong\u003E. When I started working as a programmer, I was just a coder \u2013 I was simply able to write my ideas down as a code, to tell the computer what I want it to do. Over the years I\u2019ve gathered the mindset and the skillset of a developer \u2013 a person that, well, develops a product. From start to end, from the architecture design to unit tests, able to communicate efficiently with others who work on it (developers, project managers, designers etc.), writing a code that\u2019s easy for others to co-create and maintain. Coding is more about knowing a tool, developing is more about the mindset. I\u2019m able to switch to a different framework or a completely different language within a week or two \u2013 because those are just tools.\u003C\/p\u003E\n\u003Cp\u003ESo to sum up: of course you can hire some intern for 10 PLN\/hour \u2013 they will take a month to create something, but if they\u2019re good, they will get shit done and working just fine. However, if you want to maintain this code later, develop your product further, add more people to your team, fix some bugs that came up \u2013 it will take a lot of time, tech debt will rise, bugs will multiply, time needed for testing will become huge. And you could also hire someone for 30 EUR\/hour \u2013 who would create the same functionality in just a week, keeping the code clean, easy to maintain, up-to-date with the newest trends in the field, interoperable and easier to test.\u003C\/p\u003E\n\u003Cp\u003EAnd that\u2019s why I get so pissed when I hear stuff like \u201cmy niece also does websites, she would do it for a lollipop, and you want \u003Cem\u003Emoney\u003C\/em\u003E from me?\u201d or \u201cI had some programming in high school, looks easy, you just google stuff and copy answers from Stack Overflow, how dare you make the money you do!\u201d.\u003C\/p\u003E\n\u003Cp\u003EWell, no. Sure, programming is basically just splitting complex problems into a set of simple instructions, so that even something dumb like a computer can understand and execute them \u2013 in principal it really is easy. But when it comes to doing it \u003Cem\u003Eright\u003C\/em\u003E \u2013 that\u2019s where software development becomes a real challenge.\u003C\/p\u003E\u003Csvg xmlns=\u0022http:\/\/www.w3.org\/2000\/svg\u0022 style=\u0022display: none;\u0022\u003E\u003C\/svg\u003E","tags":["coder","developer","logic","maintenance","mindset","programming"],"hasMore":true,"image":null,"introLite":"\u003Cp\u003EProgramming isn\u2019t that hard. Really. With enough time and determination, \u003Cem\u003Ealmost everybody\u003C\/em\u003E could write some useful code. The Internet is full of tutorials that teach you programming from scratch, full of people who faced the same problems you do, full of people who solved those problems and shared their solutions for you to use, and finally full of free libraries that you can \u003Cem\u003Ejust use\u003C\/em\u003E. All you need to do is learn some tools, google your problems and put together pieces of code that you find.\u003C\/p\u003E\n\u003Cp\u003EBut if it\u2019s not a black magic, not a secret knowledge, then why are software developers \u003Cem\u003Eso\u003C\/em\u003E well paid?\u003C\/p\u003E","contentLite":"\u003Cp\u003EProgramming isn\u2019t that hard. Really. With enough time and determination, \u003Cem\u003Ealmost everybody\u003C\/em\u003E could write some useful code. The Internet is full of tutorials that teach you programming from scratch, full of people who faced the same problems you do, full of people who solved those problems and shared their solutions for you to use, and finally full of free libraries that you can \u003Cem\u003Ejust use\u003C\/em\u003E. All you need to do is learn some tools, google your problems and put together pieces of code that you find.\u003C\/p\u003E\n\u003Cp\u003EBut if it\u2019s not a black magic, not a secret knowledge, then why are software developers \u003Cem\u003Eso\u003C\/em\u003E well paid?\u003C\/p\u003E\n\u003Cp\u003EIt all comes down to the issue of \u003Cstrong\u003Emaintainability\u003C\/strong\u003E. It\u2019s not that hard to write a script that \u003Cem\u003Eworks\u003C\/em\u003E. But it requires a lot of experience to write something, which \u003Cem\u003Ecan be easily modified\u003C\/em\u003E.\u003C\/p\u003E\n\u003Cp\u003EProgrammers spend more time reading code than writing it. Seriously. Sometimes we spend the whole day digging through layers of code in search of a root cause of some bug, only to discover that all you need to fix it is to slightly modify a single line of code. (Btw, that\u2019s one of the reasons one shouldn\u2019t pay programmers \u003Ca href=\u0022\/blog\/rewarding-for-loc.lite\u0022\u003E per line of code\u003C\/a\u003E).\u003C\/p\u003E\n\u003Cp\u003EWhen I look at some code I wrote just four years ago, I\u2019m terrified of it. If I had to modify something non-trivial on that website, I think I would have to get drunk first. It\u2019s a mess. No separation of concerns, no layers of abstraction, sensitive configs in PHP files, templates mixed up the the business logic \u2013 not only is it objectively \u003Cem\u003Eugly\u003C\/em\u003E and \u003Cem\u003Eunreadable\u003C\/em\u003E, but most importantly, it takes a lot of time to understand what the code does, how it does it and how to change it best.\u003C\/p\u003E\n\u003Cp\u003EThere is also a lot of \u003Cstrong\u003Eduplication\u003C\/strong\u003E. I wrote some code to handle a post form in the admin panel. Then copy-pasted it and adjusted to handle an image form. Then the same for a comment form. And some others. Now if I had to change something regarding the form handling generally, I\u2019d have to do it in all of those places (knowing the whole application, and trying not to forget\/miss any of them). If only I had that shared logic separated into any kind of abstraction, I would only have to update that abstraction, so that every form which uses it would just switch to the new version.\u003C\/p\u003E\n\u003Cp\u003EThat code would also cause me trouble regarding \u003Cstrong\u003Ecooperation\u003C\/strong\u003E. Not only because I would be ashamed to share my shitty code with anyone. Mostly because the experience of my shitty code would be even more shitty for someone who didn\u2019t write it. If I had written \u003Ca href=\u0022http:\/\/blog.cleancoder.com\/\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E cleaner code\u003C\/a\u003E, followed \u003Ca href=\u0022https:\/\/symfony.com\/doc\/current\/contributing\/code\/standards.html\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E styling conventions\u003C\/a\u003E and \u003Ca href=\u0022https:\/\/en.wikipedia.org\/wiki\/SOLID_(object-oriented_design)\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E SOLID principles\u003C\/a\u003E, wrote automated tests, used an \u003Ca href=\u0022https:\/\/en.wikipedia.org\/wiki\/Model%E2%80%93view%E2%80%93controller\u0022 target=\u0022_blank\u0022 rel=\u0022noopener\u0022\u003E MVC\u003C\/a\u003E framework \u2013 then every experienced developer could just jump into the project without much preparation, knowing where to look without having to know the whole project. But in case of my shitty code, they would have to suffer through a lot before being able to work on it. Plus, they\u2019d have to know Polish \u2013 for some reason I used it to name some variables and templates... \ud83e\udd26\u003C\/p\u003E\n\u003Cp\u003EThat\u2019s why I\u2019m distinguishing between \u003Cstrong\u003Ecoders\u003C\/strong\u003E and \u003Cstrong\u003Edevelopers\u003C\/strong\u003E. When I started working as a programmer, I was just a coder \u2013 I was simply able to write my ideas down as a code, to tell the computer what I want it to do. Over the years I\u2019ve gathered the mindset and the skillset of a developer \u2013 a person that, well, develops a product. From start to end, from the architecture design to unit tests, able to communicate efficiently with others who work on it (developers, project managers, designers etc.), writing a code that\u2019s easy for others to co-create and maintain. Coding is more about knowing a tool, developing is more about the mindset. I\u2019m able to switch to a different framework or a completely different language within a week or two \u2013 because those are just tools.\u003C\/p\u003E\n\u003Cp\u003ESo to sum up: of course you can hire some intern for 10 PLN\/hour \u2013 they will take a month to create something, but if they\u2019re good, they will get shit done and working just fine. However, if you want to maintain this code later, develop your product further, add more people to your team, fix some bugs that came up \u2013 it will take a lot of time, tech debt will rise, bugs will multiply, time needed for testing will become huge. And you could also hire someone for 30 EUR\/hour \u2013 who would create the same functionality in just a week, keeping the code clean, easy to maintain, up-to-date with the newest trends in the field, interoperable and easier to test.\u003C\/p\u003E\n\u003Cp\u003EAnd that\u2019s why I get so pissed when I hear stuff like \u201cmy niece also does websites, she would do it for a lollipop, and you want \u003Cem\u003Emoney\u003C\/em\u003E from me?\u201d or \u201cI had some programming in high school, looks easy, you just google stuff and copy answers from Stack Overflow, how dare you make the money you do!\u201d.\u003C\/p\u003E\n\u003Cp\u003EWell, no. Sure, programming is basically just splitting complex problems into a set of simple instructions, so that even something dumb like a computer can understand and execute them \u2013 in principal it really is easy. But when it comes to doing it \u003Cem\u003Eright\u003C\/em\u003E \u2013 that\u2019s where software development becomes a real challenge.\u003C\/p\u003E","words":910,"readTime":4,"lang":"en"}}}}}