Sunday, August 8, 2021

Touch typing

Touch typing (typing without looking at the keyboard) is an essential skill. Here is an intro video. Placement test. My current stats: 50 words per minute at 90% accuracy. Diary of a person learning to touch type.

As with any skill in life, the key is regular daily practice. "Hard work beats talent when talent doesn't work hard" 

Friday, June 25, 2021

Hierarchy of expertise

  1. Know fundamental concepts.
  2. Solve well formulated problems using existing methods/libraries.
  3. Increase your knowledge of methods/libraries and be more proficient in choosing the best solution method for a given problem.
  4. From ambiguous statements and missing information, create well formulated problems by making reasonable assumptions/approximations and solve them.
  5. Develop novel/more efficient solutions to existing problems.
  6. Discover new problems.
  7. Solve new problems.

Wednesday, June 23, 2021

Industrial Engineering vs Computer Engineering

For an industrial engineer to be useful, the company employing her must have sufficient size to make use of statistical optimization. A common misconception among freshman ind. eng. students is that they will quickly become managers, even CEOs. In reality management requires 5+ years of experience and becoming a CEO requires a strong network.

While most managers think they are competent, even if they are not industrial engineers, no manager thinks they are good computer engineers if they have not graduated from computer engineering. This bias is against industrial engineers who compete for management jobs. 

If your undergraduate is in computer engineering you can get quickly through the door and start contributing to the bottom line. If you have management inclination, opportunities will come up. But for you to take advantage of those opportunities, you first have to be let in. As a computer engineer your chance is much higher than an industrial engineer.

Thursday, June 10, 2021

Introduction

A couple of years ago, a senior computer engineering student from Middle East Technical University asked for help with her term project. The project was building an auction server with multiple clients with the C language on Linux. It was relatively easy for me but quite difficult for her because she had not have much guidance in project work. The computer engineering department's method was to "throw them into the sea and let them learn to swim by themselves"(!) And you are expected to do that while you are taking 4 other courses.

As an engineer with 25 years of experience, I saw that computer engineering students have gaps in the following areas:

  • Coding homework and term projects: Translating ideas/abstractions into designs and working, efficient, elegant code (a.k.a. implementation).
    • Reviewing and refactoring code.
    • Efficiently using IDEs like Visual Studio, Eclipse, NetBeans, IntelliJ
    • Efficient debugging, cause of common errors when using C, C++, Java, C#
  • Working with Linux, using Windows Subsystem for Linux.
  • Using GitHub and Google Drive. How to document well.
  • Where and how computer engineering concepts are used.
  • Career planning / coaching
    • What is the intersection of your interests, computer engineering and industry needs?
    • Opportunities in Türkiye and abroad.
    • Gaining experience:
      • "The way to be good at programming is to work (a) a lot (b) on hard problems. And the way to make yourself work on hard problems is to work on some very engaging project."
      • Asking me for project ideas.
      • Internships.
      • Open source projects.
      • Freelancing (TopTal, Turing).
      • Programming competitions (e.g. HackerRank).
    • Focusing on being useful instead of just passing exams.
    • Preparing for interviews. Writing a CV, cover letter, letter of intent, letter of reference.
    • Networking.
      • Working with professors.
      • Industry events.
      • I can act as a speaker in university computer club events.
      • Using social media effectively and building an audience.
    • Academy vs industry. Working in a company vs being an entrepreneur. 
    • The startup ecosystem. Idea - MVP - investment - product - growth - IPO/exit.
    • Support network: Experienced people, investors and peers who could be co-founders.
  • After you start your career
    • Difference between the code you wrote for classes and production code.
    • Marketing yourself.
    • Software systems engineering.
    • Software project management.
    • Handling conflicts with management.
    • Hiring high quality software engineers.
    • Performance evaluation of software engineers.
Since I have experience and interest in all these areas, I can help computer engineering students become better and fulfill their potential, without all the unnecessary tears and pain. What I get in return is working on interesting problems and the joy of helping others. The only thing to keep in mind is that I can only help you if you ask for my help. So feel free to contact me :)