Introduction to IDE Development

IDE Development Course

Andrew Vasilyev

Welcome

Let me introduce myself

Andrew Vasilyev

Degree in Aerospace Systems Engineering.

Spent the last 10 years developing tools for software developers:

  • Enterprise RAD framework and DSLs at a subsidiary of Acronis/Parallels
  • New development platform at 1C Company
  • ReSharper and Rider at JetBrains

andrew.vasilyev@jetbrains.com https://t.me/retran

Organizational Notes

Please join our Telegram channel: https://t.me/+jBxzse2OsjQwYWQy

The course page will be available at: https://retran.me/ide-development-2023/

You will need a GitHub account.
Please share your username with the course team.

Course Overview

Learning Targets

  • Provide a deep conceptual understanding of IDEs and their underlying architecture.
  • Familiarize students with the specific algorithms and techniques pivotal to IDE development.
  • Ensure students gain hands-on experience in tackling common challenges and scenarios in IDE development.
  • Prepare students for thesis projects and internships within JetBrains' product teams.
  • Empower students to embark on careers at companies specializing in IDE development.
  • Impart insights into the future landscape of IDEs and related software development tools.

Advice for Success

  • Always ask questions (in public channels preferably).
  • Share your insights and discoveries.
  • Collaborate with colleagues.
  • Engage in hands-on coding.
  • Learn by doing.
  • Brag!

Roadmap

  • Introduction to IDE Development
  • The Craft of Text Editing
  • Text Editors in IDE
  • Project Handling in IDE
  • Language Processing Basics
  • Symbol Tables and Resolve
  • Understanding Type Systems and Static Analysis
  • Performance and Efficiency of IDEs
  • Understanding Dynamic Analysis
  • Smart Search, Navigation, and Code Completion
  • Code Modifications and Formatting
  • Generation and Refactoring of Code
  • AI-Driven Features
  • Course Recap and Future Trends

Recommended Books

To understand software development problems:

  1. "The Pragmatic Programmer" by Andrew Hunt and David Thomas
  2. "Code: The Hidden Language of Computer Hardware and Software" by Charles Petzold

To understand Kotlin:

  1. "Kotlin in Action" by Dmitry Jemerov and Svetlana Isakova

To understand how desktop applications work:

  1. "Modern Operating Systems" by Andrew S. Tanenbaum and Herbert Bos

Recommended Books

To understand programming languages:

  1. "Compilers: Principles, Techniques, and Tools" by Alfred V. Aho, Monica S. Lam, Ravi Sethi, and Jeffrey D. Ullman
  2. "Programming Language Pragmatics" by Michael L. Scott
  3. "Programming Languages: Application and Interpretation" by Shriram Krishnamurthi
  4. "Language Implementation Patterns" by Terence Parr
  5. "Types and Programming Languages" by Benjamin C. Pierce
  6. "Programming Languages: Principles and Practices" by Kenneth C. Louden and Kenneth H. Lambert
  7. "Software Verification and Validation: An Engineering and Scientific Approach" by Norman E. Fenton and James Neil

Recommended Books

To understand modern approaches to work with code:

  1. "Clean Code: A Handbook of Agile Software Craftsmanship" by Robert C. Martin
  2. "Refactoring: Improving the Design of Existing Code" by Martin Fowler
  3. "Code Complete: A Practical Handbook of Software Construction" by Steve McConnell
  4. "Working Effectively with Legacy Code" by Michael C. Feathers

Recommended Books

To understand dynamic analysis:

  1. "Dynamic Analysis: Theoretical Developments and Applications" by Felienne Hermans
  2. "Dynamic Program Analysis and Software Exploitation" by Chris Eagle
  3. "Dynamic Analysis and Design of Offshore Structures" by Srinivasan Chandrasekaran and S. Rajan
  4. "Advanced Dynamic Analysis Techniques for Software Testing and Debugging" by Pei Hsia, Ali Mili, and Khaled El-Fakih

Recommended Books

To understand text editors:

  1. "The Craft of Text Editing: Emacs for the Modern World" by Craig A. Finseth

To understand AI:

  1. "Speech and Language Processing" by Dan Jurafsky and James H. Martin
  2. "Transformers for Natural Language Processing" by Denis Rothman

Assesment

  1. Written examination, weight: 50%
  2. Programming assignment, weight: 50%

To pass you have to pass each component with at least 45%.

Software Developer Toolset

What tools do you know and use?

Text Editor

Compiler or/and Interpreter

Linker

Dependency and Package manager

Build and/or task automation system

Debuggers

Perfomance and Memory Profilers

Code Indexation and Search

Linters

Code Formatters and Beautifiers

Code Generators/Scaffolders

Test Runners

Version Control Systems

Virtualization & Containerization Tools

Bugs and Issues Trackers

Knowledge Base and Documentation

RAD Tools

Problems of development tools Zoo

Editing and reading code as plain text

Project, dependency and build chaos

Debugging

Profiling

Version Control

Search and Navigation

Safe Refactorings

Linting

etc

Solution

An Integrated Development Environment (IDE) is a software application that provides comprehensive facilities to computer programmers for software development. An IDE typically combines several tools into one software package

A Brief History of IDEs

1960s and Earlier

Programming in its infancy, primarily hardware-driven.

Punched Cards

Code was physically punched onto cards and processed by machines.

1970s

The era of command-line compilers and the dawn of integrated tools.

Command-Line Compilers

FORTRAN and COBOL compilers took the stage.

First IDEs

Tools began integrating editing, compiling, and debugging.

1980s

The rise of personal computing reshaped the development landscape.

Borland Turbo Pascal

One of the first IDEs to integrate an editor with a compiler.

Microsoft's QuickBasic

An easy-to-use environment for BASIC development.

1990s

Graphical interfaces became mainstream, and Java emerged.

Visual Basic and Delphi

Introduced many to GUI-based software development.

Java and IDEs

Eclipse & NetBeans became the standard for Java development.

Microsoft Visual Studio

A multi-language development hub.

2000s

The internet era demanded new tools and integrations.

Web Development

IDEs like Dreamweaver focused on web languages like HTML and CSS.

Version Control

IDEs started integrating with tools like Git and SVN.

IntelliJ IDEA

JetBrains released an IDE that introduced refactorings for Java.

2010s

Cloud computing and open-source tools redefined the landscape.

Cloud-Based IDEs

Development environments became accessible via browsers.

2020s and Beyond

Artificial Intelligence and remote work began shaping tools.

AI Integration

IDEs started to provide AI-driven assistance, code suggestions and error detection.

Remote Collaboration

Supporting remote pair programming and collaborative coding became crucial.

Holy War

Lightweight Text Editors
  • Speed: Generally faster due to fewer features.
  • Simplicity: Straightforward UI, focused on editing.
  • Extensibility: Plugins/extensions add specific functionalities.
  • Examples: Sublime Text, Atom, Notepad++.
  • Use Cases: Quick edits, single-file scripts, note-taking.
Integrated Development Environments (IDEs)
  • Speed: Might be slower due to many built-in features.
  • Comprehensive: Feature-rich environment for full development lifecycle.
  • Integrated Tools: Debugger, compiler, code suggestions, etc.
  • Examples: IntelliJ IDEA, Eclipse, Visual Studio.
  • Use Cases: Large-scale projects, multi-file software, collaborative coding.

Overview of IDE Components

Project Level

  • Virtual File System
  • Project Model
  • Caches

Code Level

  • Lexer
  • Parser
  • Resolve & Semantic Analysis
  • PSI
  • Static Analysis
  • Call Graph and Interprocedural Analysis

Document and UI Level

  • Document Markup
  • Text Editor
  • Dynamic Analysis Integration
  • Other UI Components

Features

  • Code Completion
  • Navigation and Search
  • Refactorings
  • External Tools Integration

Conclusion

Next: "The Craft of Plain Text"

Questions & Answers

Thank you for your attention!

I'm now open to any questions you might have.