Introduction to IDE Development
IDE Development Course
Andrew Vasilyev
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
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:
- "The Pragmatic Programmer" by Andrew Hunt and David Thomas
- "Code: The Hidden Language of Computer Hardware and Software" by Charles Petzold
To understand Kotlin:
- "Kotlin in Action" by Dmitry Jemerov and Svetlana Isakova
To understand how desktop applications work:
- "Modern Operating Systems" by Andrew S. Tanenbaum and Herbert Bos
Recommended Books
To understand programming languages:
- "Compilers: Principles, Techniques, and Tools" by Alfred V. Aho, Monica S. Lam, Ravi Sethi, and
Jeffrey D. Ullman
- "Programming Language Pragmatics" by Michael L. Scott
- "Programming Languages: Application and Interpretation" by Shriram Krishnamurthi
- "Language Implementation Patterns" by Terence Parr
- "Types and Programming Languages" by Benjamin C. Pierce
- "Programming Languages: Principles and Practices" by Kenneth C. Louden and Kenneth H. Lambert
- "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:
- "Clean Code: A Handbook of Agile Software Craftsmanship" by Robert C. Martin
- "Refactoring: Improving the Design of Existing Code" by Martin Fowler
- "Code Complete: A Practical Handbook of Software Construction" by Steve McConnell
- "Working Effectively with Legacy Code" by Michael C. Feathers
Recommended Books
To understand dynamic analysis:
- "Dynamic Analysis: Theoretical Developments and Applications" by Felienne Hermans
- "Dynamic Program Analysis and Software Exploitation" by Chris Eagle
- "Dynamic Analysis and Design of Offshore Structures" by Srinivasan Chandrasekaran and S. Rajan
- "Advanced Dynamic Analysis Techniques for Software Testing and Debugging" by Pei Hsia, Ali Mili,
and Khaled El-Fakih
Recommended Books
To understand text editors:
- "The Craft of Text Editing: Emacs for the Modern World" by Craig A. Finseth
To understand AI:
- "Speech and Language Processing" by Dan Jurafsky and James H. Martin
- "Transformers for Natural Language Processing" by Denis Rothman
Assesment
-
Written examination, weight: 50%
-
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
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
Next: "The Craft of Plain Text"
Questions & Answers
Thank you for your attention!
I'm now open to any questions you might have.