Skip to content
 
 

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

LEARNING AND MASTERING NEW THINGS SUCH AS PROGRAMMING LANGUAGES

My approach to learning new programming languages is well-structured and methodical, which I think is essential for mastering complex topics efficiently. Here’s a brief summary and some additional tips to enhance your learning journey:

Summary of Your Learning Strategy:

  1. Set Clear Goals: Define what you want to achieve with each language.
  2. Study Official Documentation: Start with the most reliable source.
  3. Practice with Projects: Apply your knowledge through practical projects.
  4. Leverage Online Resources: Use tutorials, blogs, and community forums.
  5. Build Real-World Applications: Solidify your skills by working on real-world problems.
  6. Review and Refactor: Continuously improve your code.
  7. Track Progress: Keep a log of your learning milestones and reflect on your progress.

Additional Tips:

  • Pair Programming: Collaborate with others to learn different approaches and techniques.
  • Code Reviews: Participate in code reviews to get feedback and learn best practices.
  • Teach Others: Explaining concepts to others can reinforce your understanding.
  • Stay Consistent: Regular practice is key to retaining knowledge and skills.

Suggested Roadmap for New Languages:

  1. Rust:

    • Start with: "The Rust Programming Language" book (also known as the Rust book).
    • Community: Join the Rust users forum and Rust subreddit.
    • Project Ideas: Implement a small CLI tool, contribute to an open-source Rust project.
  2. Go (Golang):

    • Start with: "A Tour of Go" on the official Go website.
    • Community: Participate in the Go Forum and Gophers Slack.
    • Project Ideas: Build a REST API, create a concurrent web scraper.
  3. TypeScript:

    • Start with: TypeScript Handbook on the official website.
    • Community: Join TypeScript communities on Discord and Reddit.
    • Project Ideas: Develop a full-stack application with TypeScript, contribute to DefinitelyTyped.
  4. Kotlin:

    • Start with: Kotlin Koans and the official Kotlin docs.
    • Community: Engage with Kotlin communities on Slack and Reddit.
    • Project Ideas: Build an Android app, create a backend service with Ktor.
  5. Dart (with Flutter):

    • Start with: Flutter documentation and Dart language tour.
    • Community: Join Flutter communities on Discord and Reddit.
    • Project Ideas: Develop a cross-platform mobile app, create custom Flutter widgets.
  6. Elixir:

    • Start with: "Elixir School" and the official Elixir guides.
    • Community: Participate in the Elixir Forum and Elixir Slack.
    • Project Ideas: Build a real-time chat app, develop a scalable API gateway.

Tracking Progress:

  • Learning Log: Maintain a detailed log of your learning activities, including time spent, resources used, and key takeaways.
  • Milestones: Set specific milestones for each language (e.g., completing a tutorial, building a project, contributing to open source).
  • Reflection: Regularly reflect on what you’ve learned and identify areas for improvement.

HOW TO ?

New Languages I Want to Learn

This document outlines how I learned to program in various languages and the time it took me to master them. I am a programmer with experience in C, C++, Java, Web technologies (PHP, HTML5, CSS3, Sass), JavaScript, R, and Python. However, new and exciting programming languages continue to emerge, and I am eager to learn them through self-teaching.

I believe that thoroughly studying the official documentation is the best way to acquire accurate information and learn a language effectively. Below, I will share my approach to learning new programming languages and the strategies I use to master them.


My Learning Strategy

  1. Choose a Language and Set Goals

    • Identify the language I want to learn and define clear goals (e.g., building a project, understanding specific concepts, or contributing to open source).
    • Research the language's use cases, strengths, and weaknesses to ensure it aligns with my objectives.
  2. Study the Official Documentation

    • Start with the official documentation, as it is the most reliable source of information.
    • Focus on understanding the syntax, core concepts, and best practices.
    • Take notes and create cheat sheets for quick reference.
  3. Practice with Small Projects

    • Begin with small, manageable projects to apply what I've learned.
    • Gradually increase the complexity of the projects as my understanding deepens.
  4. Use Online Resources and Communities

    • Supplement the documentation with tutorials, blogs, and video courses.
    • Join online communities (e.g., Reddit, Stack Overflow, Discord) to ask questions and learn from others.
  5. Build Real-World Applications

    • Once comfortable with the basics, work on real-world applications or contribute to open-source projects.
    • This helps solidify my knowledge and exposes me to advanced concepts.
  6. Review and Refactor Code

    • Regularly review my code to identify areas for improvement.
    • Refactor code to make it more efficient, readable, and maintainable.
  7. Track Progress and Reflect

    • Keep a log of the time spent learning and the milestones achieved.
    • Reflect on what worked well and what could be improved for future learning.

Languages I’ve Learned and Time Invested

Here’s a breakdown of the programming languages I’ve learned, along with the approximate time it took me to master them:

  • C

    • Time to Master: 6 months
    • Key Projects: Basic console applications, data structures, and algorithms.
  • C++

    • Time to Master: 8 months
    • Key Projects: Object-oriented programming, game development, and system-level applications.
  • Java

    • Time to Master: 6 months
    • Key Projects: Android apps, enterprise-level applications, and web services.
  • Web Development (PHP, HTML5, CSS3, Sass)

    • Time to Master: 4 months
    • Key Projects: Dynamic websites, content management systems, and responsive designs.
  • JavaScript

    • Time to Master: 5 months
    • Key Projects: Interactive web applications, front-end frameworks (React, Vue), and Node.js back-end development.
  • R

    • Time to Master: 3 months
    • Key Projects: Data analysis, statistical modeling, and data visualization.
  • Python

    • Time to Master: 4 months
    • Key Projects: Scripting, machine learning, and web development (Django, Flask).

New Languages I Want to Learn

1. C3

  • Known for: A modern alternative to C with improved syntax and safety features.
  • Use Cases: System programming, embedded systems, and performance-critical applications.
  • Projects to Test My Knowledge:
    • Build a system utility (e.g., a file manager or process monitor).
    • Create a lightweight game engine.
    • Write a compiler or interpreter for a custom language.

2. Rust

  • Known for: Memory safety, performance, and concurrency.
  • Use Cases: System programming, web assembly, game development, and embedded systems.
  • Projects to Test My Knowledge:
    • Sokoban Game: Sokoban Game in Rust.
    • Checkers or Chess Game with AI.
    • WebAssembly-based browser application.

3. Go (Golang)

  • Known for: Simplicity, fast compilation, and built-in concurrency.
  • Use Cases: Cloud services, microservices, DevOps tools, and CLI applications.
  • Projects to Test My Knowledge:
    • REST API for a blog or e-commerce platform.
    • CLI tool for task management or automation.
    • Concurrent web scraper or data processor.

4. V (Vlang)

  • Known for: Simplicity, fast compilation, and memory safety.
  • Use Cases: System programming, web development, and scripting.
  • Projects to Test My Knowledge:
    • Build a web server or framework.
    • Create a lightweight database or cache system.
    • Develop a cross-platform desktop application.

5. Zig

  • Known for: Simplicity, performance, and low-level control.
  • Use Cases: System programming, embedded systems, and performance-critical applications.
  • Projects to Test My Knowledge:
    • System monitoring tool.
    • Simple 2D game engine.
    • Compiler or interpreter for a custom language.

6. Nim

  • Known for: Performance, expressive syntax, and metaprogramming.
  • Use Cases: Web development, game development, and scripting.
  • Projects to Test My Knowledge:
    • Build a web application using the Nimble framework.
    • Create a game using the SDL2 library.
    • Write a script automation tool.

7. TypeScript

  • Known for: Adding static typing to JavaScript for better code quality.
  • Use Cases: Large-scale web applications, front-end frameworks, and Node.js back-end development.
  • Projects to Test My Knowledge:
    • React app with TypeScript and state management.
    • Node.js API using Express.js and TypeScript.
    • Full-stack application with TypeScript on both ends.

8. Ada

  • Known for: Strong typing, reliability, and safety-critical systems.
  • Use Cases: Aerospace, defense, and embedded systems.
  • Projects to Test My Knowledge:
    • Build a flight simulation system.
    • Develop a safety-critical embedded application.
    • Create a real-time operating system (RTOS).

9. FORTRAN

  • Known for: High-performance computing and numerical analysis.
  • Use Cases: Scientific computing, engineering simulations, and data analysis.
  • Projects to Test My Knowledge:
    • Write a numerical solver for differential equations.
    • Develop a weather simulation model.
    • Optimize a matrix multiplication algorithm.

10. Pascal

  • Known for: Structured programming and simplicity.
  • Use Cases: Education, legacy systems, and desktop applications.
  • Projects to Test My Knowledge:
    • Build a text-based adventure game.
    • Create a simple IDE or text editor.
    • Develop a desktop application using Lazarus.

11. D

  • Known for: Modern features, performance, and C-like syntax.
  • Use Cases: System programming, game development, and web applications.
  • Projects to Test My Knowledge:
    • Build a web server or framework.
    • Create a game using the D game libraries.
    • Write a high-performance data processing tool.

12. LISP

  • Known for: Functional programming, macros, and symbolic computation.
  • Use Cases: Artificial intelligence, language processing, and academic research.
  • Projects to Test My Knowledge:
    • Build a symbolic math solver.
    • Develop a chatbot or natural language processor.
    • Create a LISP interpreter in LISP.

13. Haskell

  • Known for: Pure functional programming, strong typing, and lazy evaluation.
  • Use Cases: Academic research, compiler design, and financial modeling.
  • Projects to Test My Knowledge:
    • Write a compiler or interpreter.
    • Develop a financial modeling tool.
    • Create a functional web application using Yesod.

14. Erlang

  • Known for: Concurrency, fault tolerance, and distributed systems.
  • Use Cases: Telecommunications, real-time systems, and messaging apps.
  • Projects to Test My Knowledge:
    • Build a real-time chat application.
    • Develop a distributed task scheduler.
    • Create a fault-tolerant web server.

15. Ruby

  • Known for: Elegant syntax, productivity, and web development.
  • Use Cases: Web applications, scripting, and automation.
  • Projects to Test My Knowledge:
    • Build a web application using Ruby on Rails.
    • Create a CLI tool for automation.
    • Develop a gem (Ruby library) for a specific use case.

16. Scala

  • Known for: Functional and object-oriented programming, JVM compatibility.
  • Use Cases: Big data, web applications, and distributed systems.
  • Projects to Test My Knowledge:
    • Build a web application using Play Framework.
    • Develop a data processing pipeline using Apache Spark.
    • Create a DSL (Domain-Specific Language).

17. OCaml

  • Known for: Functional programming, strong typing, and type inference.
  • Use Cases: Compiler design, formal verification, and academic research.
  • Projects to Test My Knowledge:
    • Write a compiler or interpreter.
    • Develop a theorem prover or formal verification tool.
    • Create a functional web application.

18. Kotlin

  • Known for: Modern syntax, interoperability with Java, and concise code.
  • Use Cases: Android development, server-side applications, and cross-platform development.
  • My Roadmap: How I Learnt Kotlin.
  • Projects to Test My Knowledge:
    • Android App: Build a weather app or a task manager with a modern UI.
    • Backend Service: Create a backend service using Ktor or Spring Boot.
    • Cross-Platform App: Develop a multiplatform app using Kotlin Multiplatform.
    • Library or Plugin: Contribute to an open-source Kotlin library or create a custom Gradle plugin.

19. Dart (with Flutter)

  • Known for: Cross-platform development, fast performance, and expressive UI.
  • Use Cases: Mobile app development (iOS and Android), web apps, and desktop apps.
  • My Roadmap: How I Learnt Dart and Flutter.
  • Projects to Test My Knowledge:
    • Mobile App: Build a social media app or a fitness tracker.
    • Web App: Create a responsive web application using Flutter for the web.
    • Desktop App: Develop a cross-platform desktop app for productivity or entertainment.
    • UI/UX Experiments: Design and implement custom animations and widgets.

20. Elixir

  • Known for: Scalability, fault tolerance, and functional programming.
  • Use Cases: Real-time applications, distributed systems, and web development.
  • My Roadmap: How I Learnt Elixir.
  • Projects to Test My Knowledge:
    • Real-Time Chat App: Build a chat application using Phoenix and WebSockets.
    • API Gateway: Develop a scalable API gateway for microservices.
    • Data Processing Pipeline: Create a pipeline for processing large datasets.
    • Open-Source Contribution: Contribute to an Elixir library or framework.

Conclusion

This list includes a wide variety of programming languages, each with unique strengths and use cases. By setting clear goals, following structured learning paths, and building practical projects, I can effectively master these languages and expand my programming expertise. I’m excited to dive into these languages and share my progress along the way!


Last Updated: [January 23, 2025]
Next Goal: Start learning both Rust and C3 and complete the Sokoban game project.

About

This is how I learnt to program in the new different programming languages listed in this README file and the time it took me to master what I learnt correctly.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors