Status
SteamPeaks
ChartsSalesUpcomingPatchesNewsCalculator
New on SteamEvery app, DLC and depot the minute Steam creates itAppsEvery app on Steam, newest change firstPackagesSubs and bundles, and what each containsDepotsDepots, manifests and install sizesTagsSteam's user tags and the games under themDevelopers & publishersCompanies and their cataloguesTechnologiesEngines, SDKs and anti-cheat found in the filesChange historyEvery PICS changelist as it lands
SignalsNineteen readings of the whole catalogueCompareAny games side by sideRecordsAll-time peaks and the days they were setReportsWeekly and monthly write-upsAlerts & newsroomWatch a game, get told when it movesSteam statusIs Steam up, right nowWeb API explorerTry the endpoints in the browser
NewsSteam's own announcements and the sales calendarCalculatorWhat a Steam account is worth, and its pile of shame
/
Sign in
/
SteamPeaks
The ultimate resource for Steam data.
ExploreChartsSalesSales and festsUpcomingPatchesNewsRecordsTrendingSignals
DatabaseAppsPackagesDepotsTagsDevelopersTechnologiesChange historyMasterworked.GG
ToolsCalculatorCompareSearchAlertsSteam statusAPI
SiteMethodologyFAQDiscordSupportSign in via Steam
Not affiliated with Valve or Steam. Game names and artwork belong to their owners. All times UTC.
PrivacyCookiesFair useStatus
JOY OF PROGRAMMING - Software Engineering SimulatorNewsJOY OF PROGRAMMING 1.0
Major update

JOY OF PROGRAMMING 1.0

JOY OF PROGRAMMING - Software Engineering Simulator · published 18 Jan 2025, 18:01 UTC

All newsPlayers around this dateRead on Steam

After one exciting year in Early Access, I am very pleased (and a little proud) to announce the 1.0 release of JOY OF PROGRAMMING and the conclusion of its Early Access phase. This does not mean 1.0 will be the final update. On the contrary: I plan to support JOY OF PROGRAMMING for the foreseeable future and add new levels whenever I have ideas for new challenges. Of course, I also hope the 1.0 release will bring in some new players and our little community will grow with more user made levels (check out the level editor after you're comfortable with the game itself)!

I think it is more important than ever to deepen and widen your programming skills, and game-based learning is great opportunity to do just that.

Happy Coding!

Full changelog over the last year until today:

version 1.0.0
- Added "tinygrad" (https://github.com/tinygrad/tinygrad) to third party modules for deep learning
- Increase virtual RAM upgrades (64->128, 128->256, 256->1024)
- Added new machine: VacuumRobot, automatically cleans up all objects with tag "Dirt".
- Added two new Machine Learning levels: Image Classification and Coin Detection
- Added two new Smart Home Levels: VacuumRobot0 and VacuumRobot1
- Improved documentation for several machinesversion 0.9.0
- Added a new level:
- SQL Database (Machine Learning category)
- Preparations for 1.0 release
- Removed "Beta Map" feature.
- Cleaned up some obsolete UI
- Linux/Proton support: Please use Proton Experimental. All levels (including image processing levels) now work correctly under Proton Experimental (but not under Proton 9.03).
- Known issues:
- Localization: While the UI and the tutorials are fully localized in different languages, most other levels do not support localization. These are created with the included level editor which does not support easy localization. Unfortunately, this cannot be easily amended and will not change in the upcoming 1.0 release.version 0.8.0
- Added new levels:
- Crane Lift (Logistics)
- Clock Synchronization (Smart Home)
- Hurdles (Driving)
- Improved AirliftCrane pickup handling
- Improved DataExchange handling
- Known issue under Linux/Proton: Image processing levels do not work correctly under Linux / Proton ("Sensor not available" error message and blank image)version 0.7.3
- fixed nullptr exception in StopProcess under Proton (Windows was unaffected). JOY OF PROGRAMMING is now (experimentally) Linux-compatible by running the under Proton 9. It should run under Mac as well using Whisky.
- replaced python.exe with pythonw.exe. The background python process is now invisible.version 0.7.2
- Fixed bug in "Bugged Phone" level, where the number 9 did not yield waveform data correctly
- Fixed another c++ related startup crash
- Fixed a bug in "Network Graph 1" level (added missing indicators for source and target nodes)
- Fixed a bug in "Maximum Image" level that was introduced by the recent, stricter sandboxingversion 0.7.1
- hotfix for potential startup crash if an older version of visual c++ was installed (recommended to install newest version from https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170)
- fixed "undo/redo" spanning different script tabs. Now undo history is reset upon script tab change.version 0.7.0
- Added 4 new levels (several beta maps since release of the game):
- Artillery Shooting (Military)
- Flood Fill (Creative)
- Stocks Manipulation (Hacking)
- Card Counting (Hacking)
- Fixed bug in "Goldsmiths" level
- Fixed bug with ".astype" function being incorrectly flagged as unsafeversion 0.6.6
- Security fix (thanks Snudget and Loglet)
- Relocated histograms backend
- Weekly Map is now called Beta Mapversion 0.6.5
- New level category: Machine Learning, starting with 2 new levels
- Added solution videos to both ML levels
- Fixed: Added missing code tooltips to SmartCamera
- Fixed: "UnlockedEverything" achievement now works
- Fixed: Added missing tooltips to AlarmClock
- Level Editor: added 4 new SpawnableVFX Rain, Distortion, Sparks, WaterJetversion 0.6.2
- Fixed Gold Leaderboard not being awarded correctly and some other issues with leadearboard achievements (unfortunetly leaderboard achievements cannot be granted retroactively)version 0.6.1
- Added two new graph based levels to the "Algorithms" category
- Added two new "Coin Counter" image processing levels to the "Puzzles" category
- Added solution videos for: "Maximum" and "Image Maximum"
- Added "toggle sticky button" to console log window to prevent it from collapsing
- Added new entity: SurveillanceSatellite can get the exact world location of every object on the map using get_satellite_data().
- Added static distance_to_line method to Vector3 class
- Fixed MovablePlatform and AirliftCrane not always moving on a straight line
- Fixed "TinyHouse" potentially disappearing voxel data
- Fixed "E-Mail Validation" trivial solution
- Fixed bug / typo in docstring of PinHackerversion 0.6.0:
- Added 4 new "Algorithm" levels: Maximum Image, Swap Sort, Middle of Linked List, Majority Vote
- Added 1 new "Puzzle" level: E-Mail Validation
- Added 3 new factsheets to find
- Added MyDocuments/JoyOfProgramming/CustomLevels/* to Steam Cloud
- Added controls option to enable / disable edge scrolling and fixed edge scolling bug
- Added optional ignore_time_dilation argument to sleep() function to behave (almost) like regular time.sleep()
- Added editior_set_max_speed function to all conveyor belts enabling map creators to allow a conveyor speed of up to 25.
- Added editor_set_movement_speed and editor_set_rotation_speed to MovablePlatform, enabling map creators to adjust the speed.
- Fixed added another lines of code perk (now possible to write up to 200 lines of code)
- Fixed "open level" list not scrolling in level editor GUI
- Fixed FactBox sometimes spawning underground
- Fixed custom profile names not being used for leaderboards.
- Fixed InputBox set_text not accepting empty strings
- TriggerZones are now invisible in any in-game camera captures.
- API change: VoxelBuilder.build_voxel now defaults to simulate_physics=False instead of True.version 0.5.6:
- Added two new solution videos (PianoLessons and BuggedPhone)
- reworked DeliveryContainer to "deliver" any item inside and fire an associated on_delivered event. Should be backwards compatible to old DeliveryContainer.
- removed "Deliverable" class from pyjop api (was useless anyway, SpawnableEntities.Deliverable for level editor still works as before)
- reworked KillZone to fire a proper event not just the rfid tag.
- Fixed Artillery (basically everything was broken and changed fire command to use proper muzzle velocity in m/s). Next weekly challenge will be about the Artillery.
- Added convenience random() function to Vector3 class
- HideHud command (Ctrl-J) now also hides cross-hair in first person view (press again in FPS view)
- Added draw_throw_prediction function to SimEnvManager that allows to visualize basic throwing arcs
- Added "Fix NiceGUI" button to main menu under Options->Game. Use this once if NiceGUI does not start for you.
- improved sandboxing / audithooks handling
- Added Statistics module to python module unlocks in the Perks Menu
- Added verbosity system for log messages. Change verbosity with SimEnvManager.first().set_verbosity_level(VerbosityLevels.Important)
- Added verbosity option to print() command. Defaults to Important.
- MovablePlatform stops moving on collision with static objects by default
- RobotArm stops moving on collision with static objects by default. Can also stop on collisions of carried object with another static object (uses bounding box of carried object for detection).- Level Editor: Added option set_blocks_collision to MovablePlatform and RobotArm to allow clipping as before
- Level Editor: Removed auto-attaching on begin play of MovablePlatform. Best to call attach_entities on_reset. Also increased attach range by 5 cm
- Level Editor: Added large tooltip preview for all spawnables in level editor GUI
- Level Editor: Ensured optional goals always have value 0
- Level Editor: Improved default starter code
- Level Editor: Fixed MovablePlatform not accepting 0 limits for location / rotation
- Level Editor: Added 6 new SpawnableMeshes (Bench, Chair, OfficeChair, Table, TableRound, Postbox)
- Level Editor: Added cooldown system. Several entities now have configurable cooldowns for commands, e.g. Artillery and SniperRifle reload time for the fire command.
- Level Editor: Added scale support for most VFX emittersversion 0.5.5:
- Added Support for leaderboards / histograms for published workshop levels. Please update / re-publish your levels for this to work.
- Added "clear log" button to log window, disabled automatic clearing.
- Added toggleComment command to code editor. Ctrl-/ on US keyboard layout, Ctrl-# on EU layout (the key left of the Return key in both cases)
- Added 4 new solution videos (Tiny House; Shooting Range 0, 1 and 2)
- Added highlight to leaderboard for own entry (based on Steam / profile name)- Improved RobotArm pickup, release and collision blocking
- Improved goal progress in GPS Racing level
- Mostly disabled automatic setting of time dilation- Fixed construct code reload bug in level editor
- Fixed (for real now) leaderboard top10, top3, top2, top1 achievements not being awarded correctly (would only award highest instead of all)
- Fixed bug in code editor that caused it to get stuck on an old version of a script (happened after changing imports)
- Fixed level editor "clear button" resetting code to default player code instead of default level construct code.
- Fixed outdated info in VoxelBuilder docs. Correct command is "build_voxel", not "build".
- Fixed FactBox, was able to click quickly to receive multiple PerkPoints
- Fixed bug when clicking "Finish Level" too fast
- Fixed tooltip for Piano
- Fixed some rare issues with the MovablePlatform not respecting proper location and rotation limits
- Fixed swapped axis for the MovablePlatform in shooting range 2 (x/y and roll/pitch was swapped)
- Fixed leaderboard submit not possible on level retry
- Fixed bullet collision not having impact location setversion 0.5.4:
- Added mouse invert, mouse sensitivity and mouse lock settings
- Added user key customization for most actions
- Added draggable and resizable code window. Size and position is saved persistently.
- Holding Left ALT now highlights all entities in the current level.
- Added 1 new way to quit the game to the house level
- Added rate limit warnings if getters or setters are called repeatedly without sleep() or outside SimEnv.run_main()
- Added get_is_moving() to AirliftCrane
- Added small indicator cube to center of TriggerZone- Improved log window: Will not minimize anymore while mouse hovering. Added manual minimize toggle as well.
- Improved workshop file handling. Changing title is now possible.
- Improved workshop subscription handling. Files should now download/update while the game is running.
- Improved stability of level editor to not lose level code on testing. Removed line highlighting during level construction.- Fixed leaderboard top10, top3, top2, top1 achievements not being awarded correctly (would only award highest instead of all)
- Fixed histogram percentile achievements not being awarded correctly (would only award highest instead of all)
- Fixed not being able to import downloaded leaderboard scripts
- Fixed leaderboards showing a download script button even if there is no script attached
- Fixed rotation_limits not being clamped (on MovablePlatform for example)
- Fixed rare null pointer exception in first person mode
- Fixed PyramidPuzzle level getting stuck at 75%
- Fixed timing of Goals display (would sometimes not update on level complete)
- Fixed RobotArm not resetting to its initial position
- Fixed potential hang-up of code editor when importing modules
- Fixed ESC key not working properly when viewing certificates
- Fixed int getters not reading negative values (e.g. RaceCar get_gear)- Planned: Support leaderboards / histograms for published workshop levelsversion 0.5.3
- Added Python setup dialog. This shows up if there is a problem with Python access / Windows Defender on your system.
- Fixed command set_fov for ServiceDrone (was wrongly named set_camera_fov in API).
- Fixed typo in Track Follower level.
- Fixed RobotArm set_grabber_location to accept location as vector [1,2,0] or as args 1,2,0 without brackets.
- Updated GUI input for Vector / Rotator to accept brackets like [1,2,0] or (1,2,0) as well.
- Fixed two rare null pointer exceptions that could crash the game.
- Fixed a crash when printing images to the log console.
- Fixed allowing leaderboard submission without completing all stars in this current run.
- Fixed integer commands not accepting negative values (e.g. RaceCar.first().set_gear(-1))
- Increased lines of code (LOC) limit overall by 20 lines
- Fixed? GPS tracker decoupling from RaceCar in "GPS Racing" level.
- Fixed? Gametime achievements would instant unlock.
- Experimental: Enabled download of leaderboard scripts (not for the weekly map). Scripts will be downloaded to Documents/JoyOfProgramming/LeaderboardScripts/LEVEL_NAME and can be loaded from the code window. Use with caution and check downloaded scripts before execution.
Known issue: Button to download leader script always visible, even if no script available.
Known issue: When attaching script to leaderboard, the leaderboard does not update automatically but the score is uploaded regardless.
Known issue: Attaching script to leaderboard fails sometimes.
More from JOY OF PROGRAMMING - Software Engineering Simulator

Other announcements

All news
In-game event31 Aug 2025Small free content updateWhile I am currently quite busy with the development of my second game Card Coder, I did take some time to create a small content update for JOY OF PROGRAMMING. In particular, this update includes two new levels in the Driving category where you have to setup speed traps with the help of a RangeFinder or a SmartCamera respectively. And if a car is too fast, this is how you handle that situation…Community24 Jul 2025Games Forged in Germany FestI'm happy to announce that both of my games were selected for the Games Forged in Germany Fest. To celebrate the occasion, JOY OF PROGRAMMING is 30% off and the Demo for my upcoming card-building roguelike Card Coder is being released today ! Be sure to check out both games and the other titles featured in the fest!Game update28 Jan 2025Patch 1.0.2- improved objective description in CaesarCypher and CraneLift levels - fix in level Triangulation that caused commands to be counted multiple times - fixed "key not found" error in "Fibonacci" and "E-Mail validation" level - Improved log window: a) Increased opacity. b) Clicking a line copies it to the clipboard. - minor bug fixes