Gokhan Ozgozen: Reading Other People’s Code Is a Great Way of Learning New Things

I talked to Gokhan Ozgozen, a freelance developer from Soshace.com, who shared with me his programming path and passion for web development, as well as gives a few tips on how to succeed as a freelancer.

--

Gokhan Ozgozen has more than seven years of experience in web development, having worked for banking and telecommunications industries and then choosing to freelance, because he felt it was more challenging and gave him a number of opportunities to learn and play with new technologies. Gokhan is proficient in Java, JavaScript, and Python. In this interview, he talks about his work experience, challenges he faces daily as a freelancer, the courage it took him to break free from the office shackles and encourages everyone to never stop learning.

Hello Gokhan! Let’s start with your story. How did you get into programming?

I was born in Istanbul, the eldest son of an engineer and a pharmacist. In Turkey, all students have to take national tests that take place annually to attend a high school or university. There are no score requirements to join a school, instead, you have to score higher than other students to ensure your spot in a school. That made my childhood very stressful! I was an ambitious person, I remember crying after I learned I was the 2nd best student at one of the tests! Nevertheless, I managed to score in the top 1000 students in those national exams which guaranteed my spot in the top schools. I went to a science high school where only quantitative studies are encouraged. I got into programming because solving puzzles using applied mathematics and coding was quite interesting to me back then. This is how I learned Java. It was JDK 4. Remember this is more than 15 years ago!

After taking a test to attend a university, I found myself in the middle of a dilemma. One part of me wanted to be a doctor because I wanted to learn how the human body works. Another part of me wanted to be a computer scientist because I wanted to learn how these machines work as well. After all, I decided my real passion was to understand “how things work”, so I decided engineering was a better fit for my character.

I loved almost every course I took in university related to Computer Science, especially about software development. Because all you needed was a computer to create something from scratch. I was also interested in high-level mathematics, so I took courses like advanced statistics, complex calculus just for fun.

I worked in the industry for about 2 years, then I wanted to learn more about my field so I applied for a Master’s degree and I finished it in 2017. I decided to put an end there because pursuing Doctoral studies would interfere with my professional career and I wouldn’t be able to work in two different areas. I always enjoyed challenges where I can see results immediately, theoretical studies where you can’t apply your results were not really my thing.

What did you do before you joined Soshace?

When I was a junior in college, I got an internship offer from the top GSM company in Turkey, called Turkcell. I was Java intern there, found myself in an environment where more than 200 engineers worked on a single ambitious project. It was a mobile — web — b2b application where all customers interact with each other to handle their daily duties. Requirement Engineers, Test Engineers, Developers, Architects, Designers, and consultants were all working altogether. I learned a lot from them and in return, they prolonged my internship contract until I finish college. The day I graduated, they offered me a permanent position so I took it. I improved my Java skills, especially in creating solutions under heavy load with lots of flexibility required from our business analysts.

After a few years, I decided it is time for me to change projects because I have been working on the same project for a little too long. Even though I was learning something new every day, the rate was declining. I was very fluent in Java, Javascript, and mobile application development there and had a good CV.

I thought that working at a bank was a good idea based on my skills: the strict requirements and security precautions would allow me to do my best. Also in Turkey, best software engineering practices can be found in banking and GSM industry simply because we have top companies who are consistently scoring great results among European competitors.

So I applied at a bank called Akbank ( which was named the most valuable brand in Turkey in 2015 ). I got accepted and worked there as a Senior Java developer. My task was to develop a middle-ware developed in-house to orchestrate millions of requests daily. Applying security checks, ensuring business requirements and handling logging. I also developed some in-house frameworks and applications there, because I had some free time and I wanted to provide some solutions that I encountered during my daily routines. After a while, my small applications got popular in the bank, especially the search application which allowed employees to search and find a piece of code instantly thanks to reverse indexing algorithms I created.

After a few years, I found myself in another dilemma. One part of me wanted to go abroad and work in bigger companies and one part of me wanted to learn brand new technologies and create products with it. In a bank environment, for stability reasons, people tend to choose not-so-modern technologies. This is where my freelancing career began.

So I chose to freelance. I worked for dozens of small companies and even single individuals, developing software for their needs. All my life I have worked in large organizations and this was a new experience for me. I had to quickly learn new technologies, create solutions, improve my communication and problem-solving skills, try to communicate with clients in such a way that I can understand what they “really” want and propose alternative solutions if I feel what they want is actually not possible. I developed mobile applications for restaurants, created websites for law companies, and e-commerce websites. I also created a mobile application for myself. I worked as a technical support engineer to improve my communication skills where I had to interact with customers from all over the world. I had to adapt to changes, I had to solve complex computer science problems by communicating with non-technical people. Finally, I found Soshace, and this is where I am happily sitting at, for this point in my life!

What programming languages, frameworks do you know? How did you learn them?

I know Java, Python, and Javascript. I learned Java by myself when I was in high school, then improved my skills during my professional career. I developed various projects written in Java using Spring, Hibernate, Apache Camel, Apache Struts frameworks. All frameworks exist to provide a pre-defined solution to repeating problems in the software development cycle. So after a point in software engineer’s career, learning a new framework can be achieved just carefully researching documentation, reading books and applying that information to a business application which is being used by lots of people. This is how I learned those frameworks. Improve if I know it, learn if I don’t know it.

I learned Python in college and developed recommender systems with it using famous machine learning algorithms. My Python knowledge is essentially coming from an academic background rather than industrial applications. However, any large-enough project consists of more than one programming language simply because there is no single tool that is great for all tasks.

If you are working on web applications, it is unavoidable to learn JavaScript and its frameworks. I had to learn Angular because of my clients’ requests. I really find it great for a certain range of requirements and it is a very strong framework that can handle lots of mundane tasks which otherwise would be extremely tedious.

My learning strategy is generally following the official documentation, reading books. After having a certain level of knowledge, I attend conferences, meet new people that are fluent about those technologies. Also reading other people’s code is a great way of learning new things. It is not rare for me to discover that I have been doing something wrong for a considerably long time! I experience those epiphany moments by following other people’s code. I think this experience would be relatable to other developers as well.

I also love re-inventing the wheel. What I mean is, creating my own solution before trying a framework or a library. Then compare my results to the industry standard. This way I learn how things work internally, also, I appreciate the efforts other developers put to create those frameworks or libraries. This is, of course, time-consuming but very helpful.

What are your favorite technologies?

My favorite technology stack would be Java-Spring-Hibernate-Hazelcast- Apache Solr — Angular — MySQL or Oracle DB.

I have limited knowledge of React.js to make a healthy comparison though I know that Angular is a more heavy framework that handles almost every aspect of front-end programming whereas React.js is more flexible and gives more freedom to developers. You have to handle things the way Angular wants you to if you want to use Angular. But you have more freedom with React.js. However, it is extremely well documented and performs really well. One of my favorite tools under the right circumstances.

How did you decide to become a freelancer? What advice can you give to other aspiring freelancers who want to break free from the office shackles?

I spent a considerable amount of my time in large offices, working with lots of different engineers. This is, of course, a very good experience, however, brings an overhead. Sometimes you just want to do things the way you want. Office bureaucracy and company limitations can hinder your productivity. I wanted to learn cutting edge technologies, create new products. Some clients really don’t care about how you develop solutions for their needs as long as it works. Others have strict requirements about the tech stack. But I wanted to be flexible about sustaining both of those client types’ needs. I decided to work with people from all over the world. I can work with an engineer from Russia, test engineer from Portugal for a client from the US. This is all great and there is so much to learn! This is not an easy decision to make but very rewarding after all.

I would advise aspiring freelancers to prepare themselves first. Technical preparation is required to support clients with their needs. Also, remote working is not as easy as it seems. You have to carefully plan your meetings, time schedule. Your work environment, hardware, the mindset must be professional. There is little room for mistakes. You have to ask the right questions, you have to be professional. In the office environment, you can tell your manager that your office computer doesn’t work hence you can’t complete your task. But for a remote working environment, it is entirely YOUR responsibility. You can’t just say “my computer doesn’t work, sorry I can’t complete this task on time.” You have to plan for things like that. You have to have a backup internet connection, backup hardware. You have to be available all the time. This gives clients the feeling that “you are there.”

What are the challenges you are facing while working freelance? What are the core differences between freelance and office work?

I had to read a couple of books about this topic, just to prepare myself. I have very carefully planned a notebook to go over my daily, weekly and monthly tasks. When I am talking to a client, a single sentence such as “..oh, by the way, we should do this tomorrow” would mean a new task. You have to take responsibility and notes all the time and keep track of it yourself. Even client can forget this task but you should remind this to her/him. You have to create logical boundaries in your home. There should be a single room dedicated to your work. Your family, friends and even your pets should know that if you are working, this is serious. In the office, you can gather around a corner and have a small talk about the weather. You don’t have this luxury for remote working. If you are working, you are charging the client for it. If you are doing something else, this is unacceptable.

Describe your regular work day.

My daily routine is something like this: I wake up, go over my notes about my daily report. I emphasize which tasks I have completed, which tasks I am working on. I plan things ahead. I make sure that I am communicating with clients on a daily basis. A simple email or a simple skype message means that I am working. If I encounter a problem, I notify them immediately. At the end of the day, my job is to provide solutions to their problems. Communication and professionalism are essential in this regard.

Do you plan to relocate somewhere else, like, say, the States?

I have to be very honest here. I have been to the US and other countries in Europe and I would really enjoy relocating there some time in my life. However, my parents are getting really old and relocating to somewhere far away would mean I will be out of touch with them. I feel that I would be abandoning them If I leave one day. Sure they can come to visit or I can visit them back, but again I feel that I am in debt of everything they have done for me in my life. Maybe somewhere close enough, like in a few hours of flight time would be best for relocation : )

What are your career aspirations and career goals?

In my career, I worked with engineers who wanted to be a manager one day. In contrast, I really love what I do and being a manager and abandoning the technical side of things would not make me happy. I imagine myself still being on the technical side, developing software code in a daily routine. At least consulting young engineers who do it would be satisfactory for me. I want to keep improving my skills, learning new skills to enhance my toolkit and work with the best of the best to learn from them. I also love working on side-projects, maybe one day I can found my own company to create software that solves some daily problems. As an engineer, nothing gives more happiness than creating something that solves problems for people. You can look at it and say “I created this.”

What was the most challenging project you ever worked at?

I will answer this question with 2 examples.

Most technical challenge:

When I was working in Turkcell, we have created an advertisement campaign which lasted only 1 hour. The catch was, all flagship phones were only $1 for a limited time. Basically, it was a give-away however this ad-campaign created huge traffic to our website. Customers were adding items to the basket and trying to purchase $1 flagship smartphones. It was a big challenge for us to concurrently respond to a huge number of requests, making sure we are not over-selling (there was a limitation on how many numbers of phones we can sell) and we are not hindering customer experience. In the end, we had to create a solution consisting of multiple database locks and in memory cache locks. Turkey has a population of 80 million and more than half of it has an active internet connection. Selling flagship phones with $1 was a really big thing to achieve without website becoming unresponsive.

Most challenging:

This is challenging in terms of working conditions. We had to meet deadlines and worked for 14 hours every day! And not just for a week or two. For 3 months, I had to work for 14 hours a day in a bank, wearing suits and developing code. This was a horrible experience for me. I remember coming to work the next day, not recognizing the code I wrote yesterday simply because I was too tired. Prolonged coding sessions are very dangerous because you actually create much more bugs if you are tired. The next day would be like a bug-fix session for yesterday’s mistakes. Thankfully we managed to meet the deadline and everything went well afterward.

How do you see the future of web development?

For every project, there are certain tasks that need to be done no matter what the project is about. Security, logging, layering, messaging, etc. Today’s frameworks attempt to solve this with simple and elegant solutions. I believe with Artificial Intelligence, those repeated tasks would be actually handled by AI. Smarted IDEs and frameworks that can write code for you would emerge. If you inspect a project that was coded 10 years ago, you would feel “this whole section can be done with a single line of code”. I believe this pattern would continue.

Front-end technologies depend on web browser standards for modern life. Mobile devices also follow those standards. I think in the future more smart devices will be integrated into our daily lives and we will have a single standardized front-end experience for those devices. You will not only design a website or write code to work in a web browser, but your code will also be executed on a smart oven in the kitchen or on your refrigerator.

Evil thing about front-end technologies that they should have some level of backward compatibility. There are websites still running on a piece of code which was written 20 years ago. Adopting those old technologies to new standards should not be difficult otherwise people would try new technologies. For example, an event for today updating Angular version for an application can break a few things. The most time-consuming task in software development is not the development itself but the maintenance of the code. So backward compatibility can be hindering development of the new features.

You said you were capable of writing full tutorials on cryptography or Java technologies. How did you get involved in cryptography, and why do you think you’re qualified to write about it?

During my senior year in college, my graduation project was about creating 3D Authentication capable LDAP system with offline token generator hardware. I got into modifying open-source LDAP software to enable 3D authentication ( open-LDAP ) with small token generator device. During that time, banks and other security optimized application were using these devices as smartphones were not distributed much, not all customers of the banks had a smartphone that is capable of generating tokens. I used secure cryptography algorithms to generate and synchronize token generators. It was a difficult challenge because every time a user presses the button on the generator, a new unique key would be generated to be logged in to LDAP or a bank account. These tokens must be verified at the server-side and had to have certain TTL embedded. Thanks to my knowledge in this area, I worked for the security team in the bank as I was developing public APIs which further enhanced my knowledge. Applying OWASP criteria and security best practices over more than 5 years I feel comfortable discussing cryptography algorithms and best practices based on the use-cases of the applications.

People tend to believe if they are using SSL, everything would be secure enough, which is a big mistake. There are various other types of attacks which enables attackers to obtain sensitive customer data. I am planning to write articles covering which cryptographic methods can be applied for uses cases like client-side encryption, end to end ( point to point ) encryption, securely hashing customer passwords, using secure public keys for RSA encryption, storing and distributing keys securely and helper design principles to avoid man in the middle attacks.

Cryptography is a field that requires heavy mathematical understanding to completely absorb information, however for application developers, there are some must know things to secure their applications whether is a simple chat application or a gateway that requires to be secure and fast. When I write an application that requires some kind of input from the user, I always think of possible attacks that attacker may apply so security is always one of the top priorities for me. Frameworks that I use daily supports all the tools to be used for security best practices so I intend to give up to date coding examples as well.

How did you become involved with Soshace? What interviews did you have to pass in order to be accepted?

I noticed Soshace’s existence during my routine web search, noticed that it received very good reviews. I checked engineers’ profiles and their accomplishments and I felt that I must be a part of this great network. The most challenging interviews were the technical interview for me to be honest, even though I have successfully completed given tasks in time, still, I must admit that sharing your screen to an engineer while you are solving a problem within a given time is stressful. I would advise programmers to learn common algorithms to overcome common problems that they might encounter in their day to day jobs, and I would also advise them to learn formal algorithms from a reputable book just to understand theory and application in the background. Almost all the algorithms that a programmer might need have been written somewhere else previously unless they are developing something really proprietary and unique, so reading other people’s code and ideas is a great way to learn. Also, there are a couple of nice websites to develop algorithm skills within a time limit, just for practice. I enjoy solving algorithmic practices myself, not for just improving my skills but for the sheer pleasure of solving a puzzle.

Please describe, how did you get a job through Soshace. How did a client choose your candidacy? What tips can you offer freelancers who’re preparing for their first interviews with remote clients?

After my approval of Soshace, in a quick time interval, I got an interview with a client. My skill set was a big match with their requirements so it was a smooth process. I explained my prior knowledge and skills and why I might handle their day to day tasks professionally. I am good at communicating with clients, I myself used freelancers for various other projects before. I would advise freelancers to improve their communications skills, asking the right questions, understanding the needs of the client is very important. Very few people are 100% match for a given task so willing to learn what you don’t know is crucial. Also being open about things you don’t yet know is quite essential during interviews. Another thing is to view interviews as a way of assessing the client as well. What I mean is that, yes, the client is judging your skills and compatibility but as a freelancer, it is your duty to assess the client and make a decision for yourself as well. Saying “yes” is a big commitment so freelancers should learn their capabilities before making such professional commitments.

What are your hobbies, what do you do in your free time? If you like reading, what’s your favorite book on web development or any particular programming language, like Java, for example?

Oh, I love reading. I always read multiple books at a given time, one for distracting my mind and for pleasure. This can be a sci-fi novel or a comic book. Anything that I can read without hurting my brain cells : ) Also, I enjoy reading books about abstract ideas or history. Something that I can learn and think about it after I finish a reading session. These are the books that I enjoy reading while I have a fresh mind and want to think about some problems that I have never thought of. Finally, I always read a book related to my profession. Whether It can be a general programming book or something about a framework/language I would like to improve my skills in. I would advise reading Effective Java for Java developers, The Pragmatist Programmer, and Clean Code. Also, Programming is an Art by Knuth is a great book to browse, though it is a bit thick, a great read nevertheless. Currently, I am reading a book about Kafka library, for fast async messaging; an RPG novel called “Homeland” ( I know this one is not very socially acceptable for someone at my age :) ) and a book called “Life’s Little Instruction Book” which I am really enjoying.

Please be wary of the fact that languages and frameworks are constantly changing, so reading a book about it might provide outdated information. This is why I would advise reading books that are covering either up-to-date information or some big picture which would not change in the nearest future.

I am a copywriter at Soshace.com, a hiring platform for web developers: hire a developer or apply for a remote job. If you have an interesting story to tell, please ping me on Twitter @ MaryVorontsov I would love to hear from you and share your story.

--

--

I am a copywriter: I like reading and writing stories, above-average copy, and delightfully inferior poetry.