programming languages

Photo by cottonbro from Pexels.com
Photo by cottonbro from Pexels.com


Recently, a new graduate (B.Sc. Computer Science) asked me about learning programming languages. He does not have any professional programming experiences, and he used Java and Python for his school projects. He rated himself as an average programmer, and he wants to improve his programming skills. Therefore, he believes that he must work on his proficiency in one or two programming languages. Being paranoid about pointing him to the wrong directions, I did not completely answer his question. I told him that it depends on which software stack that he is interested in. For mobile applications, he needs to learn native mobile application development, and the programming languages shall be Swift, Java or Kotlin. For web application development, there are Javascript, Typescript and Flow.

After we've parted, I keep thinking about his question which appears to be a simple one, and yet I cannot provide good answers. In the perspective of a fresh graduate, what does he need to do?

Mobile Applications

When developing mobile applications, we have to look into native mobile application toolkits. Google has Flutter which is a UI Software Development Toolkit to facilitate development of beautiful mobile applications on all devices and platforms from a single codebase. I love this kind of toolkit because I do not need to invest in different codebases for iPhone, Android and Web applications. However, the device native features may not be supported by Flutter. One example is the iPhone's touch gestures. Hence we have to decide if it is ok to give up some native features in order to have one codebase. For enterprise applications, it may be ok to skip these native features.

Programming in Swift, Java, Kotlin, Dart (for Flutter) are not difficult. The challenges are to understand the advantages and limitations in these development toolkits. There are always trade offs. The focus should be on designing and developing successful (human usable) applications.

Web Applications

Javascript and Typescript are the most commonly used programming languages for Web Application Development. For enterprise web development, I suggest Typescript because it does type checking, and its compiler (to Javascript) catches static errors. It also enforces better programming practices such as defining proper types and interfaces.

Once again, programming is not the difficult part. The focus should be on selecting a good Web Development Framework. There are a few popular ones such as React, Vue and Angular. I found a good read for comparing these 3 frameworks. I should mention SAPUI5/OpenUI5 which I had spent many years developing on it and I have some friends who are driving its roadmap and directions.

It is important to have good knowledge of Browser (DOM, performances, local storage, etc.), HTML5 and Cascading StyleSheet (CSS). Web developers spend significant amount of time with UI Designers who help to create metaphor, visual and interaction designs. Therefore, web developers must have good judgements on UI designs and usability matters.

API and Web Servers

These are the servers that provide concise and reliable services to the Mobile and Web Applications. It takes a request (usually HTTPS request) and return a response (usually JSON format). Express (NodeJs), Asp.Net, Django and Spring.io are popular frameworks. With respect to programming languages, we have many options such Javascript, Typescript, C#, Python and Java respectively. We also have golang which have many web development tools.

It is important to learn about optimization (response per minute)OpenAPI Specification (aka Swagger), asynchronous event handling, and GraphQL (from Facebook).

Services

Services such as Authentication, Authorization, Persistency (Database, Blob Storage, etc.), Geospatial, Machine Learning, Time Series, etc. High Performance Programming Languages (CC++ and maybe Java) are usually used.

Typically, the codebase is huge. It may take a new developers a few months to be understand and contribute.

Conclusion

There are a lot more to what we have mentioned above. For example, creating libraries (such as Google's protocol buffer), web frameworks (such as React and Vue), testing frameworks (such as JUnit and Jasmine),  tools (profiler, Microsoft vscode), etc.

I believe that anyone can code in any programming languages with some trainings. There are a lot of things beyond coding such as designing efficient data structures (graphs, tree, etc.), dynamic programming, (heap) memory management, design patterns, designing and implementing tests, deploying solutions, etc

From programming point of view, we look for maturity in writing code. For example (in Javascript).

const sample = function (arr) {
  const result = [];
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] % 2 === 0) {
      result.push(arr[i]);
    }
  }
  return result;
};

vs

const sample = (arr) => {
  return arr.filter((item) => item % 2 === 0);
};

Both functions return the same result. However the latter one is more concise and readable.

In my opinion, it does not matter which programming languages to learn. There are strengths and weakness in every programming language. It is essential for a versatile software developer to learn, and appreciate them. Most importantly, (s)he uses the appropriate programming language accordingly.

I have developed (chronological order) in C++ (during the Microsoft's MFC days with Visual C++) → Java (1.1) → JavaScript (Spider Monkey) → PERL → Java (1.3 -> 1.6) → Python (2.x) → JavaScript (Spider Monkey) → JavaScript (ES6) → Typescript (3.x) → Python (3.x). In between, I picked up HTML5, CSS, different web development framework, swagger (OpenAPI), SQL, SQL Scripting, etc.

I am not an expert in any programming languages (maybe this is the reason why I cannot answer his question :-)). More than anything else, I value the domain knowledges and problem solving techniques that I have learned in my professional life.







Comments

Popular posts from this blog

OpenAI: Functions Feature in 2023-07-01-preview API version

Storing embedding in Azure Database for PostgreSQL

Happy New Year, 2024 from DALL-E