- Know fundamental concepts.
- Solve well formulated problems using existing methods/libraries.
- Increase your knowledge of methods/libraries and be more proficient in choosing the best solution method for a given problem.
- From ambiguous statements and missing information, create well formulated problems by making reasonable assumptions/approximations and solve them.
- Develop novel/more efficient solutions to existing problems.
- Discover new problems.
- Solve new problems.
Friday, June 25, 2021
Hierarchy of expertise
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.
Friday, June 11, 2021
Links for beginners
General motivation and computer science information:
- An App Called Napster
- What to do in college
- The Computer Science Iceberg Explained
- Crash Course Computer Science
- Ece's blog (computer engineering student at Bilkent, one of my mentees)
Programming:
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.