Career Pathfinder Engine PoC

This is the companion notebook to the Pathfinder app. It is meant to give some insights about the nature and shape of the data and give some cluse about the design decisions that have been taken along the way.

A brief look at the raw data

We basically use 4 datasets coming from the usual places: Kaggle, Huggingface, StackOverflow. The jobs, the courses, world cities geo information, and the StackOverflow 2025 survey.

The job offers are from Kaggle

https://www.kaggle.com/datasets/asaniczka/linkedin-data-engineer-job-postings

(def jobs
  (load/load-dataset (jobs/job-postings-path)))
(ds-info jobs)
Total Rows: 6025

_unnamed: descriptive-stats [11 4]:

:col-name:datatype:n-valid:n-missing
:job-title:string60250
:company:string60250
:job-location:string60250
:job-link:string60250
:first-seen:packed-local-date60250
:search-city:string60250
:search-country:string60250
:job-level:string60250
:job-type:string60250
:job-summary:text5665360
:job-skills:string49601065

here is an example

(-> (tc/random jobs 5)
    (tc/drop-columns [:job-summary]))

_unnamed [5 10]:

:job-title:company:job-location:job-link:first-seen:search-city:search-country:job-level:job-type:job-skills
Senior Operations Data AnalystMedical MutualBrooklyn, OHhttps://www.linkedin.com/jobs/view/senior-operations-data-analyst-at-medical-mutual-37579152442023-12-17Cuyahoga FallsUnited StatesMid seniorOnsiteSQL, SAS, PowerBI, Tableau, Microsoft Office, Data mining, Analytics, Data analysis, Data reconciliation, Data reporting, HIPAA, NCQA, Sherlock, Quality assurance, Unit test plans, Dataflow diagrams, Data visualization
Data Research Analyst, gt.school (Remote) - $60,000/year USDCrossoverCape Coral, FLhttps://www.linkedin.com/jobs/view/data-research-analyst-gt-school-remote-%2460-000-year-usd-at-crossover-37831839292023-12-17FloridaUnited StatesAssociateRemoteGenerative AI, Machine Learning, Python, JavaScript, JSON, R, ObjectOriented Programming, Data Science, Research, Product Development, Data Analytics, Coaching, Communication, Teamwork, Project Management, Remote Work, Independent Contractor
Data ScientistSunrise Systems, Inc.West Sacramento, CAhttps://www.linkedin.com/jobs/view/data-scientist-at-sunrise-systems-inc-37822505492023-12-17SacramentoUnited StatesAssociateOnsite
ANALYST I DATA STRATEGIESBoyd GamingLas Vegas, NVhttps://www.linkedin.com/jobs/view/analyst-i-data-strategies-at-boyd-gaming-37420586522023-12-17EnterpriseUnited StatesMid seniorHybridSQL, Cognos, Microstrategy, Excel, Data Warehouses, Data Analysis, Reporting, Marketing
Lead Data Engineer (AWS, Azure, GCP)CapTechAtlanta, GAhttps://www.linkedin.com/jobs/view/lead-data-engineer-aws-azure-gcp-at-captech-37516433892023-12-17SmyrnaUnited StatesMid seniorRemoteData Engineering, Data Pipelines, Cloud Technologies, AWS, Azure, GCP, ETL, Data Orchestration, Informatica, Matillion, Talend, Snowflake, Redshift, Databricks, SQL, NoSQL, PostgreSQL, MySQL, SQL Server, Oracle, Aurora, Presto, BigQuery, Python, Java, R, C, C++, Shell, Git, Jenkins, CI/CD, Jira, DevOps, Big Data, Open Source, Data Streaming, Technical Leadership, Mentoring, Architecture, Business Needs

The jobs contain synthetic data that doesn't always make much sense for our specific presentation:

(-> (load/load-dataset (jobs/job-postings-path) :column-whitelist ["job_location" "search_city" "search_country"])
    (tc/rename-columns {:job-location :location})
    (tc/drop-missing [:location])
    (tc/group-by [:location])
    (tc/aggregate {:count tc/row-count})
    (tc/order-by :count :desc))

_unnamed [1296 2]:

:location:count
United States204
New York, NY137
Chicago, IL113
London, England, United Kingdom111
Toronto, Ontario, Canada94
Atlanta, GA87
San Francisco, CA78
Phoenix, AZ70
Los Angeles, CA66
Boston, MA64
......
Hawthorn East, Victoria, Australia1
Delhi, NY1
Kettering, England, United Kingdom1
Secaucus, NJ1
Warton, England, United Kingdom1
Fairfield, OH1
Hamilton, Ontario, Canada1
Australian Capital Territory, Australia1
Russell, Australian Capital Territory, Australia1
Revelstoke, British Columbia, Canada1
Haldimand County, Ontario, Canada1

We'll take care of that, augmenting this dataset with European cities and geo locations, below.

The courses are from Kaggle

(def courses
  (load/load-dataset (courses/courses-path)))
(ds-info courses)
Total Rows: 9592

_unnamed: descriptive-stats [17 4]:

:col-name:datatype:n-valid:n-missing
:course-title:string95920
:rating:string81541438
:level:string83271265
:duration:string9330262
:course-type:string95920
:what-you-will-learn:string49824610
:skill-gain:string95920
:modules:string95920
:syllabus:text95911
:review:string81501442
:schedule:string8909683
:instructor:string95920
:offered-by:string95920
:keyword:string95920
:course-url:string95920
:column-15:string19591
:column-16:string19591

here is an example

(tc/random courses 5)

_unnamed [5 17]:

:course-title:rating:level:duration:course-type:what-you-will-learn:skill-gain:modules:syllabus:review:schedule:instructor:offered-by:keyword:course-url:column-15:column-16
Introduction to High-Performance and Parallel Computing3.2Beginner levelApprox. 14 hours to completeCourseNavigate a typical Linux-based HPC environmentDescribe the components of a high-performance distributed computing systemAssess the differences between serial and parallel programmingEstimate speedup and efficiency by generating a scaling study['Simple Linux Utility for Resource Management (SLURM) Workload Manager', 'scripting', 'Speedup', 'computing', 'Linux']['High-Performance Computing (HPC) for Non-Computer Scientists', 'Nuts and Bolts of HPC', 'Basic Parallelism', 'Evaluating Parallel Program Performance'][['Welcome and Meet the Instructor', 'Demo: Exploring Ames Housing Data'], ['Overview', 'Statistical Modeling: Types of Variables', 'Overview of Models', 'Explanatory versus Predictive Modeling', 'Population Parameters and Sample Statistics', 'Normal (Gaussian) Distribution', 'Standard Error of the Mean', 'Confidence Intervals', 'Statistical Hypothesis Test', 'p-Value: Effect Size and Sample Size Influence', 'Scenario', 'Performing a t Test', 'Demo: Performing a One-Sample t Test Using PROC TTEST', 'Scenario', 'Assumptions for the Two-Sample t Test', 'Testing for Equal and Unequal Variances', 'Demo: Performing a Two-Sample t Test Using PROC TTEST'], ['Overview', 'Scenario', 'Identifying Associations in ANOVA with Box Plots', 'Demo: Exploring Associations Using PROC SGPLOT', 'Identifying Associations in Linear Regression with Scatter Plots', 'Demo: Exploring Associations Using PROC SGSCATTER', 'Scenario', 'The ANOVA Hypothesis', 'Partitioning Variability in ANOVA', 'Coefficient of Determination', 'F Statistic and Critical Values', 'The ANOVA Model', 'Demo: Performing a One-Way ANOVA Using PROC GLM', 'Scenario', 'Multiple Comparison Methods', "Tukey's and Dunnett's Multiple Comparison Methods", 'Diffograms and Control Plots', 'Demo: Performing a Post Hoc Pairwise Comparison Using PROC GLM', 'Scenario', 'Using Correlation to Measure Relationships between Continuous Variables', 'Hypothesis Testing for a Correlation', 'Avoiding Common Errors When Interpreting Correlations', 'Demo: Producing Correlation Statistics and Scatter Plots Using PROC CORR', 'Scenario', 'The Simple Linear Regression Model', 'How SAS Performs Simple Linear Regression', 'Comparing the Regression Model to a Baseline Model', 'Hypothesis Testing and Assumptions for Linear Regression', 'Demo: Performing Simple Linear Regression Using PROC REG'], ['Overview', 'Scenario', 'Applying the Two-Way ANOVA Model', 'Demo: Performing a Two-Way ANOVA Using PROC GLM', 'Interactions', 'Demo: Performing a Two-Way ANOVA With an Interaction Using PROC GLM', 'Demo: Performing Post-Processing Analysis Using PROC PLM', 'Scenario', 'The Multiple Linear Regression Model', 'Hypothesis Testing for Multiple Regression', 'Multiple Linear Regression versus Simple Linear Regression', 'Adjusted R-Square', 'Demo: Fitting a Multiple Linear Regression Model Using PROC REG'], ['Overview', 'Scenario', 'Approaches to Selecting Models', 'The All-Possible Regressions Approach to Model Building', 'The Stepwise Selection Approach to Model Building', 'Interpreting p-Values and Parameter Estimates', 'Demo: Performing Stepwise Regression Using PROC GLMSELECT', 'Scenario', 'Information Criteria', "Adjusted R-Square and Mallows' Cp", 'Demo: Performing Model Selection Using PROC GLMSELECT'], ['Overview', 'Scenario', 'Assumptions for Regression', 'Verifying Assumptions Using Residual Plots', 'Demo: Examining Residual Plots Using PROC REG', 'Scenario', 'Identifying Influential Observations', 'Checking for Outliers with STUDENT Residuals', 'Checking for Influential Observations', 'Detecting Influential Observations with DFBETAS', 'Demo: Looking for Influential Observations Using PROC GLMSELECT and PROC REG', 'Demo: Examining the Influential Observations Using PROC PRINT', 'Handling Influential Observations', 'Scenario', 'Exploring Collinearity', 'Visualizing Collinearity', 'Demo: Calculating Collinearity Diagnostics Using PROC REG', 'Using an Effective Modeling Cycle'], ['Overview', 'Scenario', 'Predictive Modeling Terminology', 'Model Complexity', 'Building a Predictive Model', 'Model Assessment and Selection', 'Demo: Building a Predictive Model Using PROC GLMSELECT', 'Scenario', 'Preparing for Scoring', 'Methods of Scoring', 'Demo: Scoring Data Using PROC PLM'], ['Overview', 'Scenario', 'Associations between Categorical Variables', 'Demo: Examining the Distribution of Categorical Variables Using PROC FREQ and PROC UNIVARIATE', 'Scenario', 'The Pearson Chi-Square Test', 'Odds Ratios', 'Demo: Performing a Pearson Chi-Square Test of Association Using PROC FREQ', 'Scenario', 'The Mantel-Haenszel Chi-Square Test', 'The Spearman Correlation Statistic', 'Demo: Detecting Ordinal Associations Using PROC FREQ', 'Scenario', 'Modeling a Binary Response', 'Demo: Fitting a Binary Logistic Regression Model Using PROC LOGISTIC', 'Interpreting the Odds Ratio', 'Comparing Pairs to Assess the Fit of a Logistic Regression Model', 'Scenario', 'Specifying a Parameterization Method', 'Demo: Fitting a Multiple Logistic Regression Model with Categorical Predictors Using PROC LOGISTIC', 'Scenario', 'Interactions between Variables', 'Demo: Fitting a Multiple Logistic Regression Model with Interactions Using PROC LOGISTIC', 'Demo: Fitting a Multiple Logistic Regression Model with All Odds Ratios Using PROC LOGISTIC', 'Demo: Generating Predictions Using PROC PLM']]87 reviewsFlexible schedule['Thomas Hauser ', 'Shelley Knuth ']['University of Colorado Boulder']DataSciencehttps://www.coursera.org/learn/introduction-high-performance-computing
Teaching Writing Process4.3Beginner level19 hours (approximately)CourseWhat the writing process is and how it can help improve student writing.How writing as discovery, low-stakes writing and reflection can help students grow more comfortable and confident as writers.[]['Module 1: Inviting Writing', 'Module 2: What Kind of Teacher Do You Want to Be?', 'Module 3: Writing Process', 'Module 4: Writing and Reflection'][['Meet the Professor', 'Welcome to the Course', 'Discussion Forum Philosophy'], ['Macro Measures', 'GDP Components', 'How do we Calculate GDP?', 'Shortcomings in the Measurement of GDP', 'CPI Inflation', 'Measurement of the CPI', 'Shortcomings of the CPI', 'Unemployment Rate', 'Monetary cost of Unemployment', 'Types of Unemployment ', 'Calculations', 'Problem Set Solution - National Income', 'Problem Set Solution - GDP Calculation', 'Problem Set Solution - Cost of Living', 'Problem Set Solution - Grandfather Problem', 'Problem Set Solution - Labor Problem'], ['Economic Growth', 'Growth Formula', 'Consumption and Investment', 'Convergence', 'Savings Rate', 'Problem Set Solution - Solow Growth Model', 'Problem Set Solution - Changes in Steady State'], ['Labor Supply and Demand', 'Aggregate Labor Supply and Demand', 'Unemployment: Search Theory', 'An Increase in Unemployment Benefits', 'Problem Set Solution - How Many Workers to Hire?', 'Problem Set Solution - Labor Supply and Demand', 'Problem Set Solution - Search and Matching Model'], ['Savings and Consumption', 'Budget Constraints', 'An Increase in Interest Rates', 'PSS - Savings and Consumption Model Set Up', 'PSS - Saving and Consumption with a Change in Income', 'CSS - Savings and Consumption with a Change in Interest Rates'], ['Savings and Investment', 'Savings and Investment: Closed Economy', 'J-Bones House of Ribs', 'Open Economy', 'Large Open Economies', 'Problem Set Solution - Loanable Funds: Closed Economy', 'Problem Set Solution - How Many Pizza Ovens', 'Problem Set Solution - Quantity of Loanable Funds'], ['Money and Monetary Policy', 'Federal Reserve', 'Money Market', 'Phillips Curve', 'Open Economy Exchange Rates', 'Purchasing Power Parity Theory', 'Problem Set Solution - Money Market', 'Problem Set Solution - Money Supply Accounting', 'Problem Set Solution - Phillips Curve', 'Problem Set Solution - Exchange Rates'], ['Aggregate Supply and Demand', 'SRAS: Upward Sloping', 'Problem Set Solution - Aggregate Supply and Demand', 'Problem Set Solution - Interest Rate Effect', 'Problem Set Solution - Exchange Rate Effect', 'Problem Set Solution - Recovery from Recession'], ['Fiscal Policy', 'Expansionary Fiscal Policy', 'Corporate Tax Cut: Long Run', 'Problem Set Solution - Government Stimulus Spending', 'Problem Set Solution - Multipliers', 'Problem Set Solution - Corporate Tax Cuts', 'Thinking Like an Economist', 'Congratulations, You Fabulous and Determined Person, You!']]19 reviewsFlexible schedule['Mark Farrington']['Johns Hopkins University']Social Scienceshttps://www.coursera.org/learn/teaching-writing-process
Camera Control4.813 hours (approximately)Course[]['WELCOME, OVERVIEW, and FUNDAMENTALS', 'Elements of Camera Control 2.0: The Lens', ' Elements of Camera Control 3.0: Depth of Field', 'Picture Decisions:'][['MEET MSU and THE SPECIALIZATION', 'MEET THE PROFESSORS: Peter Glendinning and Mark Sullivan', 'MEET THE COURSE: an overview by Peter and Mark', 'Under Exposure and Over Eposure', 'Reflected Light Meter & Meter Modes', 'Equivalent Exposure Combinations & MAPS-prob', 'Stop Action and Blur'], ['Focal Length:"Normal," sensors, and angle of view', 'Focal Length: Perspective effects', 'Peter discusses Focal Length Pictures', 'Focal Length Series from a Single Vantage Point', 'Focal Lengths: Fixed or Zoom', 'Special Lenses: Macro', 'Special lenses: Fisheye', 'Special Lenses: Tilt-Shift', 'Smartphone Specialties', 'Protecting the Lens: shades and filters', 'Polarizing and Specialty Filters', 'Lens Adapters'], ['Successful use of Depth of Field', 'Depth of Field and Aperture, Focal Length, & Focal Distance', 'Mark discusses DOF in a photograph'], ['Photographs and Time as Fact', 'Photographs and Time As Fiction-', 'Peter discusses Time and his photography']]1,785 reviewsFlexible schedule['Mark Valentine Sullivan', 'Peter Glendinning']['Michigan State University']Arts and Humanitieshttps://www.coursera.org/learn/camera-control
A Public Health Approach to Hearing Loss and Aging4.6Beginner levelApprox. 2 hours to completeCourse[]['Background', 'Hearing and Outcomes', 'Application and Translation'][['Introduction', 'Types of Questions', 'Measurement Error: Bias and Variance', 'Standardized Interviewing', 'Conversational Interviewing', 'Concept Specification'], ['Response Process: Comprehension', 'Response Process: Retrieval', 'Response Process: Judgment', 'Response Process: Response'], ['Facts and Quasi Facts', 'Memory and Recall: Reporting Behavioral Frequencies', 'Memory and Recall: Length of Reference Period', 'Memory and Recall: Comprehension and Retrieval', 'Asking Sensitive Questions', 'Asking Sensitive Questions: Techniques', 'Asking Sensitive Questions: Indirect Techniques', 'Mode, Privacy, and Confidentiality'], ['Attitude Questions: Attitudes', 'Attitude Questions: Context Effects', 'Attitude Questions: Specific vs. General Evaluations', 'Attitude Questions; Agree Disagree Scales', "Attitude Questions: Don't Know", 'Attitude Questions: Order Effects', 'All Questions: Response Options and Scales'], ['Pretesting Techniques: Expert Reviews and Focus Groups', 'Pretesting Techniques: Cognitive Interviews', 'Behavior Coding', 'Pretesting Techniques: Quantitative Techniques', 'Pretesting Techniques - Other Techniques'], ['From Start to Finish: Putting Questions into a Questionnaire', 'Motivated Underreporting: Reports from Selected Research Studies', 'Main Questionnaire: Demographic Questions - Ending', 'Mode Choice: Implications for Layout', 'Self-Administered Questionnaires: Additional Requirements', 'Summary: Unit by Unit Take-Home Points']]12 reviewsFlexible schedule['Frank R. Lin, MD, PhD', 'Jennifer A. Deal, PhD', 'Nicholas S. Reed, AuD']['Johns Hopkins University']Healthhttps://www.coursera.org/learn/a-public-health-approach-to-hearing-loss-and-aging
Overcoming Challenges in Self and SocietyBeginner level18 hours (approximately)Course[]['Understanding Adversity: An Exploration of Challenges', 'Resilience Theory and Practice: From Hardship to Strength', 'Spiritual and Humanistic Dimensions of Resilience: A Renaissance Perspective', 'The Renaissance of Resilience: You, Your Community, and Social Transformation', 'Personal Renaissance of Resilience Mandala'][['Welcome!', 'Twitter App: Setting up the User Interface', 'Twitter App: Connecting the U/I', 'Twitter App: Styling the U/I via ".layer"', 'Twitter App: Social.Framework and building a UIAlertController', 'Twitter App: Closing a window with UIAlertAction', 'Twitter App: Checking for "Single Sign On"', 'A general pattern for pop-up alerts', 'Twitter App: Tweet with SLComposeViewController', 'Twitter App: Reviewing what we accomplished', 'Facebook: Adding an additional UIAlertAction', 'Facebook: Using SLComposeViewController to Post', 'Future Proofing with the UIActivityViewController', 'Simplifying the Interface - Less Clicks!', 'Peer-Review 01: Your turn!'], ['Overview of Instagram App', 'Building the project with Cocoapods', 'Intro to UIImageView', 'Laying out the Interface', 'OAuth 2.0', 'Accessing a web service API', 'JSON', 'Custom URL Schemes', 'NSAppTransport in iOS 9', 'Network Security Considerations', 'Getting data with NSURLSession', 'Calling and Parsing API JSON data'], ['App Lifecycle', 'Push notifications: local Part 1', 'Push notifications: local Part 2', 'Push notifications: actions', 'Push notifications: remote Part 01', 'Push notifications: remote Part 02', 'Push notifications: remote Part 03', 'Push notifications: remote Part 04', 'Push notifications: remote Part 05', 'Push notifications: remote Part 06', 'Intro to Peer Review Assignment 03'], ['Core Data: Introduction', 'Core Data: Setting Up Your Project', 'Core Data: Building the Model', 'Core Data: Wiring the UI to CoreData', 'Enrichment: The Full Core Data Example 1', 'Enrichment: The Full Core Data Example 2', 'Peer Review 04 Instructions: Storing Data App', 'Deploying to the App Store', 'App Store Analytics']]Flexible schedule['Roger L Martinez']['University of Colorado System']Personal Developmenthttps://www.coursera.org/learn/overcoming-challenges-in-self-and-society

The cities from SimpleMaps

They will "complete" the job offers and let us map between different naming conventions https://simplemaps.com/data/world-cities

(def cities
  (load/load-dataset (cities/worldcities-path)))
(ds-info cities)
Total Rows: 50250

_unnamed: descriptive-stats [11 4]:

:col-name:datatype:n-valid:n-missing
:city:string502500
:city-ascii:string502482
:lat:float64502500
:lng:float64502500
:country:string502500
:iso-2:string5021436
:iso-3:string502500
:admin-name:string50072178
:capital:string1619134059
:population:float6449826424
:id:int32502500

here's an example

(tc/random cities 10)

_unnamed [10 11]:

:city:city-ascii:lat:lng:country:iso-2:iso-3:admin-name:capital:population:id
Nagdha SimlaNagdha Simla24.614389.9166BangladeshBDBGDDhaka31436.01050208700
Cologno al SerioCologno al Serio45.58339.7000ItalyITITALombardy11066.01380174378
StarorybnoyeStarorybnoye72.7667104.8000RussiaRURUSKrasnoyarskiy Kray10.01643724242
PunganūruPunganuru13.364978.5714IndiaININDAndhra Pradesh54746.01356796945
ThondiamannuThondiamannu9.263976.8833IndiaININDKerala12508.01356161131
WeymouthWeymouth42.1981-70.9466United StatesUSUSAMassachusetts58505.01840132442
Bir GhbalouBir Ghbalou36.26313.5866AlgeriaDZDZABouira11016.01012249358
West DeptfordWest Deptford39.8431-75.1852United StatesUSUSANew Jersey22416.01840081678
DownpatrickDownpatrick54.3220-5.7030United KingdomGBGBRNewry, Mourne and Down11545.01826860584
BegusaraiBegusarai25.420086.1300IndiaININDBihār252008.01356619346

We gather insights on the hottest technologies from StackOverflow, which famously performs a yearly survey.

(def survey
  (load/load-dataset (trends/tech-survey-path) :num-rows 20))
(ds-info survey)
Total Rows: 20

_unnamed: descriptive-stats [172 4]:

:col-name:datatype:n-valid:n-missing
:"-response-id":int16200
:main-branch:string200
:age:string200
:ed-level:string200
:employment:string200
:employment-addl:string173
:work-exp:int16200
:learn-code-choose:string200
:learn-code:string155
:learn-code-ai:string200
:ai-learn-how:string146
:years-code:int16191
:dev-type:string200
:org-size:string146
:i-cor-pm:string146
:remote-work:string146
:purchase-influence:string191
:tech-endorse-intro:string182
:tech-endorse-1:int16191
:tech-endorse-2:int16191
:tech-endorse-3:int16191
:tech-endorse-4:int16191
:tech-endorse-5:int16191
:tech-endorse-6:int16191
:tech-endorse-7:int16191
:tech-endorse-8:int16191
:tech-endorse-9:int16191
:tech-endorse-13:int16191
:tech-endorse-13-text:string119
:tech-oppose-1:int16164
:tech-oppose-2:int16164
:tech-oppose-3:int16164
:tech-oppose-5:int16164
:tech-oppose-7:int16164
:tech-oppose-9:int16164
:tech-oppose-11:int16164
:tech-oppose-13:int16164
:tech-oppose-16:int16164
:tech-oppose-15:int16164
:tech-oppose-15-text:boolean020
:industry:string191
:job-sat-points-1:int16173
:job-sat-points-2:int16173
:job-sat-points-3:int16173
:job-sat-points-4:int16173
:job-sat-points-5:int16173
:job-sat-points-6:int16173
:job-sat-points-7:int16173
:job-sat-points-8:int16173
:job-sat-points-9:int16173
:job-sat-points-10:int16173
:job-sat-points-11:int16173
:job-sat-points-13:int16173
:job-sat-points-14:int16173
:job-sat-points-15:int16173
:job-sat-points-16:int16173
:job-sat-points-15-text:boolean020
:ai-threat:string191
:new-role:string191
:tool-count-work:int16137
:tool-count-personal:int16146
:country:string200
:currency:string200
:comp-total:int32146
:language-choice:string173
:language-have-worked-with:string164
:language-want-to-work-with:string164
:language-admired:string164
:languages-have-entry:string218
:languages-want-entry:string218
:database-choice:string191
:database-have-worked-with:string128
:database-want-to-work-with:string119
:database-admired:string119
:database-have-entry:int16119
:database-want-entry:int16119
:platform-choice:string182
:platform-have-worked-with:string137
:platform-want-to-work-with:string119
:platform-admired:string119
:platform-have-entry:int16119
:platform-want-entry:int16119
:webframe-choice:string173
:webframe-have-worked-with:string137
:webframe-want-to-work-with:string128
:webframe-admired:string128
:webframe-have-entry:string218
:webframe-want-entry:string317
:dev-envs-choice:string182
:dev-envs-have-worked-with:string137
:dev-envs-want-to-work-with:string119
:dev-envs-admired:string1010
:dev-env-have-entry:boolean020
:dev-env-want-entry:boolean020
:so-tags-have-worked-with:string911
:so-tags-want-to-work-with:string515
:so-tags-admired:string317
:so-tags-have-entry:string218
:so-tags-want-entry:string218
:op-sys-personal-use:string182
:op-sys-professional-use:string182
:office-stack-async-have-worked-with:string164
:office-stack-async-want-to-work-with:string146
:office-stack-async-admired:string146
:office-stack-have-entry:string218
:office-stack-want-entry:string218
:comm-platform-have-worked-with:string164
:comm-platform-want-to-work-with:string146
:comm-platform-admired:string146
:comm-platform-have-entr:string218
:comm-platform-want-entr:string218
:ai-models-choice:string173
:ai-models-have-worked-with:string1010
:ai-models-want-to-work-with:string614
:ai-models-admired:string614
:ai-models-have-entry:boolean020
:ai-models-want-entry:boolean020
:so-account:string191
:so-visit-freq:string191
:so-duration:string191
:so-part-freq:string182
:so-dev-content:string155
:so-actions-1:int16137
:so-actions-16:boolean020
:so-actions-3:int16137
:so-actions-4:int16137
:so-actions-5:int16137
:so-actions-6:int16137
:so-actions-9:int16137
:so-actions-7:int16137
:so-actions-10:int16137
:so-actions-15:int16137
:so-actions-15-text:string119
:so-comm:string173
:so-friction:string173
:ai-select:string191
:ai-sent:string191
:ai-acc:string191
:ai-complex:string191
:ai-tool-currently-partially-ai:string128
:ai-tool-don't-plan-to-use-ai-for-this-task:string119
:ai-tool-plan-to-partially-use-ai:string119
:ai-tool-plan-to-mostly-use-ai:string713
:ai-tool-currently-mostly-ai:string812
:ai-frustration:string173
:ai-explain:string137
:ai-agents:string182
:ai-agent-change:string182
:ai-agent-uses:string812
:agent-uses-general:string317
:ai-agent-impact-somewhat-agree:string614
:ai-agent-impact-neutral:string515
:ai-agent-impact-somewhat-disagree:string317
:ai-agent-impact-strongly-agree:string317
:ai-agent-impact-strongly-disagree:boolean020
:ai-agent-challenges-neutral:string146
:ai-agent-challenges-somewhat-disagree:string515
:ai-agent-challenges-strongly-agree:string164
:ai-agent-challenges-somewhat-agree:string146
:ai-agent-challenges-strongly-disagree:string614
:ai-agent-knowledge:string218
:ai-agent-know-write:boolean020
:ai-agent-orchestration:string218
:ai-agent-orch-write:string119
:ai-agent-observe-secure:string218
:ai-agent-obs-write:boolean020
:ai-agent-external:string713
:ai-agent-ext-write:boolean020
:ai-human:string182
:ai-open:string128
:converted-comp-yearly:int32146
:job-sat:int16182

here's an example

(tc/random survey 5)

_unnamed [5 172]:

:"-response-id":main-branch:age:ed-level:employment:employment-addl:work-exp:learn-code-choose:learn-code:learn-code-ai:ai-learn-how:years-code:dev-type:org-size:i-cor-pm:remote-work:purchase-influence:tech-endorse-intro:tech-endorse-1:tech-endorse-2:tech-endorse-3:tech-endorse-4:tech-endorse-5:tech-endorse-6:tech-endorse-7:tech-endorse-8:tech-endorse-9:tech-endorse-13:tech-endorse-13-text:tech-oppose-1:tech-oppose-2:tech-oppose-3:tech-oppose-5:tech-oppose-7:tech-oppose-9:tech-oppose-11:tech-oppose-13:tech-oppose-16:tech-oppose-15:tech-oppose-15-text:industry:job-sat-points-1:job-sat-points-2:job-sat-points-3:job-sat-points-4:job-sat-points-5:job-sat-points-6:job-sat-points-7:job-sat-points-8:job-sat-points-9:job-sat-points-10:job-sat-points-11:job-sat-points-13:job-sat-points-14:job-sat-points-15:job-sat-points-16:job-sat-points-15-text:ai-threat:new-role:tool-count-work:tool-count-personal:country:currency:comp-total:language-choice:language-have-worked-with:language-want-to-work-with:language-admired:languages-have-entry:languages-want-entry:database-choice:database-have-worked-with:database-want-to-work-with:database-admired:database-have-entry:database-want-entry:platform-choice:platform-have-worked-with:platform-want-to-work-with:platform-admired:platform-have-entry:platform-want-entry:webframe-choice:webframe-have-worked-with:webframe-want-to-work-with:webframe-admired:webframe-have-entry:webframe-want-entry:dev-envs-choice:dev-envs-have-worked-with:dev-envs-want-to-work-with:dev-envs-admired:dev-env-have-entry:dev-env-want-entry:so-tags-have-worked-with:so-tags-want-to-work-with:so-tags-admired:so-tags-have-entry:so-tags-want-entry:op-sys-personal-use:op-sys-professional-use:office-stack-async-have-worked-with:office-stack-async-want-to-work-with:office-stack-async-admired:office-stack-have-entry:office-stack-want-entry:comm-platform-have-worked-with:comm-platform-want-to-work-with:comm-platform-admired:comm-platform-have-entr:comm-platform-want-entr:ai-models-choice:ai-models-have-worked-with:ai-models-want-to-work-with:ai-models-admired:ai-models-have-entry:ai-models-want-entry:so-account:so-visit-freq:so-duration:so-part-freq:so-dev-content:so-actions-1:so-actions-16:so-actions-3:so-actions-4:so-actions-5:so-actions-6:so-actions-9:so-actions-7:so-actions-10:so-actions-15:so-actions-15-text:so-comm:so-friction:ai-select:ai-sent:ai-acc:ai-complex:ai-tool-currently-partially-ai:ai-tool-don't-plan-to-use-ai-for-this-task:ai-tool-plan-to-partially-use-ai:ai-tool-plan-to-mostly-use-ai:ai-tool-currently-mostly-ai:ai-frustration:ai-explain:ai-agents:ai-agent-change:ai-agent-uses:agent-uses-general:ai-agent-impact-somewhat-agree:ai-agent-impact-neutral:ai-agent-impact-somewhat-disagree:ai-agent-impact-strongly-agree:ai-agent-impact-strongly-disagree:ai-agent-challenges-neutral:ai-agent-challenges-somewhat-disagree:ai-agent-challenges-strongly-agree:ai-agent-challenges-somewhat-agree:ai-agent-challenges-strongly-disagree:ai-agent-knowledge:ai-agent-know-write:ai-agent-orchestration:ai-agent-orch-write:ai-agent-observe-secure:ai-agent-obs-write:ai-agent-external:ai-agent-ext-write:ai-human:ai-open:converted-comp-yearly:job-sat
2I am a developer by profession25-34 years oldAssociate degree (A.A., A.S., etc.)Employed2Yes, I am not new to coding but am learning new coding techniques or programming languageOnline Courses or Certification (includes all media types);Other online resources (e.g. standard search, forum, online community);Books / Physical media;Videos (not associated with specific online course or certification);Stack Overflow or Stack ExchangeYes, I learned how to use AI-enabled tools for my personal curiosity and/or hobbiesAI CodeGen tools or AI-enabled apps10Developer, back-end500 to 999 employeesIndividual contributorHybrid (some in-person, leans heavy to flexibility)NoPersonal Project131294312571414113109342515Retail and Consumer Services108391216211471314155I'm not sureI have transitioned into a new career and/or industry voluntarily65NetherlandsEUR European Euro90000YesJavaJava;Python;SwiftJavaYesDynamodb;MongoDBDynamodb;MongoDBDynamodb;MongoDBYesAmazon Web Services (AWS);Datadog;Docker;Homebrew;Kubernetes;Maven (build tool);TerraformAmazon Web Services (AWS);Datadog;Docker;Homebrew;Kubernetes;Maven (build tool);TerraformAmazon Web Services (AWS);Datadog;Docker;Homebrew;Kubernetes;Maven (build tool);TerraformYesSpring BootSpring BootSpring BootYesIntelliJ IDEA;PyCharm;Visual Studio Code;XcodeIntelliJ IDEA;PyCharm;Visual Studio Code;XcodeIntelliJ IDEA;PyCharm;Visual Studio Code;XcodeWindows;MacOS;iOS;iPadOSMacOSConfluence;GitHub;JiraConfluence;GitHub;JiraConfluence;GitHub;JiraStack Overflow;Discord;Reddit;Dev.to;Hacker News;GitHub (public projects, not private repos);Slack (public channels, not work);YouTube;Twitch;LinkedIn;Substack;MediumStack Overflow;Discord;Reddit;Dev.to;Hacker News;GitHub (public projects, not private repos);Slack (public channels, not work);YouTube;Twitch;LinkedIn;Substack;MediumStack Overflow;Discord;Reddit;Dev.to;Hacker News;GitHub (public projects, not private repos);Slack (public channels, not work);YouTube;Twitch;LinkedIn;Substack;MediumYesopenAI GPT (chatbot models)openAI GPT (chatbot models)openAI GPT (chatbot models)Not sure/can't rememberMultiple times per dayBetween 10 and 15 yearsInfrequently, less than once per yearChat (people);Message Boards;Long-form articles;Videos;Coding challenges;Logic games/puzzles;Lists of recommendations (tools, frameworks, technologies, etc.);Direct messaging of users;Job board;Day-in-the-life profiles/interviews with experts658249101115Yes, somewhatAbout half of the timeYes, I use AI tools weeklyIndifferentNeither trust nor distrustBad at handling complex tasksLearning new concepts or technologiesLearning about a codebase;Project planning;Committing and reviewing code;Deployment and monitoringWriting code;Documenting code;Debugging or fixing code;Testing code;Predictive analytics;Search for answers;Generating content or synthetic data;Creating or maintaining documentationAI solutions that are almost right, but not quite;Debugging AI-generated code is more time-consumingNoNo, and I don't plan toNot at all or minimallyIt takes significant time and effort to learn how to use AI agents effectively.;The cost of using certain AI agent platforms is a barrier.I am concerned about the accuracy of the information provided by AI agents.;I have concerns about the security and privacy of data when using AI agents.Integrating AI agents with my existing tools and workflows can be difficult.;My company's IT and/or InfoSec teams have strict rules that do not allow me to use AI agent tools or platformsWhen I don’t trust AI’s answers;When I want to fully understand something;When I want to learn best practices;When I want to compare different solutions;When I have ethical or security concerns about codeAll skills. AI is a flop.1044139
19I am a developer by profession35-44 years oldAssociate degree (A.A., A.S., etc.)Employed20Yes, I am not new to coding but am learning new coding techniques or programming languageStack Overflow or Stack Exchange;Technical documentation (is generated for/by the tool or system);AI CodeGen tools or AI-enabled apps;Blogs or podcastsNo, I didn't spend time learning in the past year20Developer, back-end20 to 99 employeesPeople managerHybrid (some remote, leans heavy to in-person)Yes, I influenced the purchase of a substantial addition to the tech stackWork14651241231011Fintech431367892101411112155NoI have somewhat considered changing my career and/or the industry I work in21GermanyEUR European EuroYesBash/Shell (all shells);Java;JavaScript;Perl;TypeScriptBash/Shell (all shells);JavaBash/Shell (all shells);JavaYesH2;MongoDB;MySQL;PostgreSQLMongoDB;PostgreSQLMongoDB;PostgreSQLYesAmazon Web Services (AWS);Ansible;APT;Docker;Heroku;Maven (build tool);npmAmazon Web Services (AWS);Docker;Maven (build tool)Amazon Web Services (AWS);Docker;Maven (build tool)NoYesIntelliJ IDEA;VimIntelliJ IDEA;VimIntelliJ IDEA;VimUbuntu;DebianUbuntu;DebianGitHub;Google Workspace;WikisGitHub;Google Workspace;WikisGitHub;Google Workspace;WikisStack Overflow;Discord;RedditStack Overflow;Discord;RedditStack Overflow;Discord;RedditYesDeepSeek (R- Reasoning models);DeepSeek (V- General purpose models);Meta Llama (all models);Mistral AI modelsYesA few times per weekBetween 10 and 15 yearsLess than once every 2 - 3 monthsLong-form articlesNo, not at allI don't use AI or AI-enabled toolsNo, and I don't plan toVery unfavorableHighly distrustVery poor at handling complex tasksLearning about a codebase;Project planning;Documenting code;Debugging or fixing code;Testing code;Committing and reviewing code;Deployment and monitoring;Search for answers;Generating content or synthetic data;Creating or maintaining documentationWriting code;Predictive analytics;Learning new concepts or technologiesOther (write in):NoNo, and I don't plan toNo, but my development work has changed somewhat due to non-AI factorsIntegrating AI agents with my existing tools and workflows can be difficult.;It takes significant time and effort to learn how to use AI agents effectively.;The cost of using certain AI agent platforms is a barrier.I am concerned about the accuracy of the information provided by AI agents.;I have concerns about the security and privacy of data when using AI agents.My company's IT and/or InfoSec teams have strict rules that do not allow me to use AI agent tools or platformsWhen I don’t trust AI’s answers;When I want to fully understand something;When I want to learn best practices;When I want to compare different solutions;When I have ethical or security concerns about code;When I need help fixing complex or unfamiliar codeAI will not become more capable in 3-5 years.5
5I am a developer by profession35-44 years oldMaster’s degree (M.A., M.S., M.Eng., MBA, etc.)Independent contractor, freelancer, or self-employedCaring for dependents (children, elderly, etc.)21No, I am not new to coding and did not learn new coding techniques or programming languagesYes, I learned how to use AI-enabled tools for my personal curiosity and/or hobbiesTechnical documentation (is generated for/by the tool or system);Other online resources (e.g. standard search, forum, online community)22Engineering managerYes, I endorsed a tool that was open-source and is currently used by more than just myself but no purchase was madeWork63191087421471339126181415Software Development941113148657211210153NoI have neither consider or transitioned into a new career or industry43UkraineUSD United States dollar60000YesC;C#;C++;Delphi;HTML/CSS;Java;JavaScript;Lua;PowerShell;Python;SQL;TypeScript;VBA;Visual Basic (.Net)C#;Java;JavaScript;Python;SQL;TypeScriptC#;Java;JavaScript;Python;SQL;TypeScriptYesElasticsearch;Microsoft SQL Server;MySQL;Oracle;PostgreSQL;Redis;SQLiteElasticsearch;Oracle;PostgreSQLElasticsearch;Oracle;PostgreSQLYesAmazon Web Services (AWS);APT;Docker;Make;Maven (build tool);MSBuild;npm;NuGet;PipAmazon Web Services (AWS);APT;Docker;Maven (build tool);MSBuild;npm;NuGet;PipAmazon Web Services (AWS);APT;Docker;Maven (build tool);MSBuild;npm;NuGet;PipYesAngular;ASP.NET;ASP.NET Core;Flask;jQueryAngular;ASP.NET Core;FlaskAngular;ASP.NET Core;FlaskYesEclipse;IntelliJ IDEA;Jupyter Notebook/JupyterLab;Notepad++;PyCharm;Rider;Visual Studio;WebStormIntelliJ IDEA;Jupyter Notebook/JupyterLab;Notepad++;PyCharm;Rider;Visual Studio;WebStormIntelliJ IDEA;Jupyter Notebook/JupyterLab;Notepad++;PyCharm;Rider;Visual Studio;WebStormLarge Language Model;Google GeminiLarge Language ModelLarge Language ModelWindows;iOSWindows;Ubuntu;DebianAzure Devops;GitHub;JiraAzure Devops;GitHub;JiraAzure Devops;GitHub;JiraStack Overflow;Stack Exchange;GitHub (public projects, not private repos)Stack Overflow;Stack Exchange;GitHub (public projects, not private repos)Stack Overflow;Stack Exchange;GitHub (public projects, not private repos)YesopenAI GPT (chatbot models)openAI GPT (chatbot models)openAI GPT (chatbot models)NoA few times per month or weeklyBetween 5 and 10 yearsInfrequently, less than once per yearLong-form articles174251061215No, not reallyRarely, almost neverYes, I use AI tools weeklyFavorableNeither trust nor distrustGood, but not great at handling complex tasksLearning about a codebase;Writing code;Debugging or fixing code;Search for answers;Learning new concepts or technologiesProject planning;Documenting code;Testing code;Committing and reviewing code;Deployment and monitoring;Predictive analytics;Creating or maintaining documentationGenerating content or synthetic dataAI solutions that are almost right, but not quitepartlyNo, and I don't plan toYes, to a great extentIntegrating AI agents with my existing tools and workflows can be difficult.;My company's IT and/or InfoSec teams have strict rules that do not allow me to use AI agent tools or platformsI am concerned about the accuracy of the information provided by AI agents.;I have concerns about the security and privacy of data when using AI agents.It takes significant time and effort to learn how to use AI agents effectively.;The cost of using certain AI agent platforms is a barrier.When I don’t trust AI’s answerscritical thinking, the skill to define the task correctly600007
18I am a developer by profession25-34 years oldMaster’s degree (M.A., M.S., M.Eng., MBA, etc.)Employed1Yes, I am not new to coding but am learning new coding techniques or programming languageOnline Courses or Certification (includes all media types);Books / Physical media;Videos (not associated with specific online course or certification);Stack Overflow or Stack Exchange;Technical documentation (is generated for/by the tool or system);AI CodeGen tools or AI-enabled apps;Blogs or podcastsYes, I learned how to use AI-enabled tools for my personal curiosity and/or hobbiesVideos (not associated with specific online course or certification);Other online resources (e.g. standard search, forum, online community);Stack Overflow or Stack Exchange8Developer, full-stack100 to 499 employeesIndividual contributorHybrid (some remote, leans heavy to in-person)Yes, I endorsed a tool that was open-source and is currently used by more than just myself but no purchase was madeWork12345129711141169148251415Government131291110213584147156YesI have somewhat considered changing my career and/or the industry I work in1020GreeceEUR European EuroYesHTML/CSS;JavaScript;Python;SQLPythonPythonYesMariaDB;MongoDB;MySQL;SQLiteMongoDBMongoDBNoYesDjango;Flask;ReactDjango;ReactDjango;ReactYesVim;Visual Studio CodeVim;Visual Studio CodeVim;Visual Studio CodeTailwind CSS 4MacOSUbuntuGitHub;Google Colab;JiraStack Overflow;Reddit;GitHub (public projects, not private repos);YouTube;TwitchGitHub (public projects, not private repos);KaggleGitHub (public projects, not private repos)YesopenAI GPT (chatbot models)YesA few times per weekBetween 5 and 10 yearsInfrequently, less than once per yearChat (people);Coding challenges;Logic games/puzzles;Direct messaging of users1582111031415No, not reallyAbout half of the timeYes, I use AI tools dailyUnfavorableNeither trust nor distrustGood, but not great at handling complex tasksWriting code;Documenting code;Debugging or fixing code;Search for answers;Learning new concepts or technologiesProject planning;Testing code;Committing and reviewing code;Predictive analytics;Creating or maintaining documentationLearning about a codebase;Deployment and monitoringGenerating content or synthetic dataAI solutions that are almost right, but not quite;Debugging AI-generated code is more time-consuming;I’ve become less confident in my own problem-solvingNo, and I don't plan toYes, somewhatIntegrating AI agents with my existing tools and workflows can be difficult.It takes significant time and effort to learn how to use AI agents effectively.;The cost of using certain AI agent platforms is a barrier.I have concerns about the security and privacy of data when using AI agents.I am concerned about the accuracy of the information provided by AI agents.My company's IT and/or InfoSec teams have strict rules that do not allow me to use AI agent tools or platformsWhen I want to learn best practices;When I have ethical or security concerns about code;When I need quick help troubleshooting6
4I am a developer by profession35-44 years oldBachelor’s degree (B.A., B.S., B.Eng., etc.)EmployedNone of the above4Yes, I am not new to coding but am learning new coding techniques or programming languageOther online resources (e.g. standard search, forum, online community);Videos (not associated with specific online course or certification);Stack Overflow or Stack Exchange;Technical documentation (is generated for/by the tool or system);AI CodeGen tools or AI-enabled appsYes, I learned how to use AI-enabled tools for my personal curiosity and/or hobbiesAI CodeGen tools or AI-enabled apps;Videos (not associated with specific online course or certification);Other online resources (e.g. standard search, forum, online community)5Developer, back-end10,000 or more employeesIndividual contributorRemoteNoPersonal Project2126513381171410584131227115Retail and Consumer Services124567891011121314153NoI have neither consider or transitioned into a new career or industryUkraineEUR European Euro31200YesJava;Kotlin;SQLJava;KotlinJava;KotlinNoYesAmazon Web Services (AWS);Google CloudAmazon Web Services (AWS);Google CloudAmazon Web Services (AWS);Google CloudYesSpring BootSpring BootSpring BootNoAmazon BedrockWindowsWindows;UbuntuGitLab;Jira;MiroGitLab;JiraGitLab;JiraStack Overflow;Reddit;YouTube;LinkedInStack Overflow;Reddit;GitHub (public projects, not private repos);YouTube;LinkedInStack Overflow;Reddit;YouTube;LinkedInNoYesA few times per month or weeklyBetween 3 and 5 yearsI have never participated in Q&A on Stack OverflowVideos;Chat (bot/AI)14567891115NeutralRarely, almost neverYes, I use AI tools weeklyFavorableSomewhat trustBad at handling complex tasksProject planning;Documenting code;Testing code;Committing and reviewing code;Deployment and monitoring;Creating or maintaining documentationLearning about a codebase;Writing code;Debugging or fixing code;Predictive analyticsSearch for answers;Generating content or synthetic data;Learning new concepts or technologiesAI solutions that are almost right, but not quite;I don’t use AI tools regularlyNOYes, I use AI agents at work monthly or infrequentlyNot at all or minimallySoftware engineeringLanguage processingAI agents have accelerated my learning about new technologies or codebases.AI agents have increased my productivity.;AI agents have improved the quality of my code.;AI agents have helped me solve complex problems more effectively.;AI agents have reduced the time spent on specific development tasks.;AI agents have improved collaboration within my team.AI agents have helped me automate repetitive tasks.It takes significant time and effort to learn how to use AI agents effectively.;The cost of using certain AI agent platforms is a barrier.I am concerned about the accuracy of the information provided by AI agents.;I have concerns about the security and privacy of data when using AI agents.;My company's IT and/or InfoSec teams have strict rules that do not allow me to use AI agent tools or platformsIntegrating AI agents with my existing tools and workflows can be difficult.ChatGPT;Claude CodeWhen I don’t trust AI’s answers;When I want to fully understand something;When I have ethical or security concerns about code;When I’m stuck and can’t explain the problem361976

The data will need major massaging before being useful to Pathfinder.

What ends up in the database

Some of this data may conceivably grow a bit too large to keep in memory, so we store the clean and adjusted data in DuckDB. DuckDB has been chosen for its native support of vector embeddings.

This is how the jobs table looks like

(count-table-rows "jobs")
6025
(-> (jdbc/execute "select * from jobs limit 5")
    tc/dataset
    (tc/drop-columns [:embedding])
    (tc/map-columns :description
                    [:description]
                    (fn [desc]
                      (if (> (count desc) 200)
                        (str (subs desc 0 200) " [...]")
                        desc))))

_unnamed [5 12]:

:description:job-id:job-title:longitude:skills:job-link:latitude:job-level:job-type:location:country:company
Overview6512713649585438804Data Engineer 22.1769Azure, SQL, NoSQL, SQL Server, Oracle, MongoDB, Data pipelines, Data integration tools, Objectoriented/object function scripting languageshttps://www.linkedin.com/jobs/view/data-engineer-2-at-cook-medical-352620741441.3825Mid seniorOnsiteBarcelonaSpainCook Medical
The Data Engineer develops, implements and documents data systems that provide the technical solutions to meet specifications and business requirements defined by company objectives to promot [...]
This is for a client of Recruiting from Scratch.3945694417727177131Staff Data Engineer6.7767Python, Snowflake, Airflow, Kubernetes, Docker, Helm, Spark, pySpark, SQL, TDD, Pair Programming, Continuous Integration, automated testing, Kafka, Storm, SparkStreaming, dimensional data modeling, ETL, data management, data classificationhttps://www.linkedin.com/jobs/view/staff-data-engineer-at-recruiting-from-scratch-374438989251.2256Mid seniorOnsiteDüsseldorfGermanyRecruiting from Scratch
Who is Recruiting from Scratch:
Recruiting from Scratch is a premier talent firm that focuses on placing the best product managers, software, and hardw [...]
This is for a client of Recruiting from Scratch.3064263555041238425Senior Data Engineer, Public Company2.3522Python, SQL, Snowflake, Airflow, Kubernetes, Docker, Helm, Spark, pySpark, Kafka, Storm, ETL, TDD, Pair programming, Continuous integration, Software testing, Deployment, Streamprocessing systems, Data modeling, Schema design, Data warehouses, Dimensional data modeling, Legal compliance, Data managementhttps://www.linkedin.com/jobs/view/senior-data-engineer-public-company-at-recruiting-from-scratch-374882847248.8567Mid seniorOnsiteParisFranceRecruiting from Scratch
Who is Recruiting from Scratch:
Recruiting from Scratch is a premier talent firm that focuses on placing the best product managers, software, and hardw [...]
This is for a client of Recruiting from Scratch.406085241463565083Senior Data Engineer, Public Company-0.3764TDD, Automation, Continuous delivery, Data engineering, Data science, Business intelligence, Python, Snowflake, Airflow, Kubernetes, Docker, Helm, Spark, PySpark, SQL, Agile engineering, Pair programming, Continuous integration, Kafka, Storm, SparkStreaming, Data warehousing, ETL, Data classification, Data retentionhttps://www.linkedin.com/jobs/view/senior-data-engineer-public-company-at-recruiting-from-scratch-374439228939.4700Mid seniorOnsiteValenciaSpainRecruiting from Scratch
Who is Recruiting from Scratch:
Recruiting from Scratch is a premier talent firm that focuses on placing the best product managers, software, and hardw [...]
Overview1351897729842045494Senior Systems Engineer, Azure Data Platform7.2683https://www.linkedin.com/jobs/view/senior-systems-engineer-azure-data-platform-at-cook-medical-377565094743.7019Mid seniorHybridNiceFranceCook Medical
We are seeking a talented Azure Cloud and Fabric Data Platform Engineer to play a pivotal role in ensuring the availability, performance, scalability, and security of our Azure-based data env [...]

The job offers have been relocated. That is, they have been assigned a major European city according to its population. This gives predicatble distribution across familiar places.

(-> (jdbc/execute "select location,latitude,longitude from jobs")
    tc/dataset
    jobs/plot-job-offers)

The courses data looks like this

(count-table-rows "courses")
6403
(-> (jdbc/execute "select * from courses limit 5")
    tc/dataset
    (tc/drop-columns [:embedding]))

_unnamed [5 14]:

:institution:description:schedule:learning-product:gained-skills:duration:rate:title:level:instructors:url:reviews:offered-by:course-id
The Museum of Modern ArtFlexible scheduleCourseArt History, Art, History, Creativity20 hours (approximately)4.8Fashion as DesignBeginner levelAnna Burckhardt, Paola Antonelli, Michelle Millar Fisher, Stephanie Kramerhttps://www.coursera.org/learn/fashion-design2813['The Museum of Modern Art']4100303846790394411
University of Illinois at Urbana-ChampaignFlexible scheduleCourseApprox. 34 hours to complete4.4Modern American PoetryBeginner levelCary Nelsonhttps://www.coursera.org/learn/modern-american-poetry100['University of Illinois at Urbana-Champaign']128792217344349905
Michigan State UniversityFlexible scheduleCourse9 hours (approximately)4.5Pixel Art for Video GamesBeginner levelAndrew Dennis, Ricardo Guimaraeshttps://www.coursera.org/learn/pixel-art-video-games227['Michigan State University']8032231401041982106
SAE Institute MéxicoFlexible scheduleCourseApprox. 8 hours to completeDistribución digital de la música independienteBeginner levelEduardo de la Vara Brown.https://www.coursera.org/learn/distribucion-digital-de-la-musica-independiente['SAE Institute México']4684675890005070207
University of RochesterStudents will be able to describe the blues as an important musical form. Students will be able to explain differences in jazz and other variations of the blues.Flexible scheduleCourseMusic, Chord, Jazz, Jazz ImprovisationApprox. 11 hours to complete4.8The Blues: Understanding and Performing an American Art FormBeginner levelDariusz Terefenkohttps://www.coursera.org/learn/the-blues582['University of Rochester']8439066051960638428

The technology trends is a distillation of the StackOverflow survey data. Once reduced to it's bare essentials it isn't that unwieldy any more.

(ds-info @trends/trends-ds)
Total Rows: 55187

_unnamed: descriptive-stats [9 4]:

:col-name:datatype:n-valid:n-missing
:desirability:float64551870
:prof-user-count:int64551870
:want-count:int64551870
:have-count:int64551870
:adoption:float64551870
:year:int64551870
:technology:string551870
:median-salary:float64486806507
:country:string537711416

here is an example

(tc/random @trends/trends-ds 10)

_unnamed [10 9]:

:desirability:prof-user-count:want-count:have-count:adoption:year:technology:median-salary:country
0.7200000011118250.225225232024C++45078.0Slovenia
0.9132948015916326920.434946572024PostgreSQL87231.0Canada
0.5250000045142800.177383592023ASP.NET34350.0Mexico
0.5714285787470.080459772023Delphi54280.0Belarus
1.000000004110.250000002025TerraformAngola
0.23255814217810430.019742882023Objective-C64254.0France
2.000000006210.166666672023NinjaMalawi
1.333333331381290.065217392023Scikit-Learn30781.0Korea, South
1.0000000022220.090909092024NumPy22800.0Iraq
1.9625000054133141600.029558472025Elixir175000.0United States

How to interpret the data

The desirability index may require some explanation. This index tells how a technology is desired (sparks geunine user interest) compared to how often people are paid to use it:

  • The Growth Drivers (Ratio > 1.1): Languages like Rust, Go, or specialized AI frameworks. These represent technologies where community excitement outstrips current enterprise adoption. This has likely a high future demand and talent scarcity, which typically commands a salary premium.

  • The Market Anchors (Ratio 0.4 – 0.7): The baseline industry giants like JavaScript, Java, and SQL. They have massive have-count values but lower ratios. This demonstrates the "Enterprise Lock-in" concept; these are the bedrock of the job market where real-world hiring volume is guaranteed, even if the developer "hype" has moved on.

  • The Atrophy Zone (Ratio < 0.3): The legacy stacks or fading frameworks. If a technology has a low count, low salary, and a plunging ratio, it tells a clear story of a shrinking ecosystem where finding modern, lucrative roles will become increasingly difficult.

The Tech Landscape

The StackOverflow's survey covers a whole lot of technologies across several countries. We take care of taking a picture of a localised reality as to avoid bunching together wildly different data groups.

For Germany:

(trends/plot-trends
 (tc/select-rows @trends/trends-ds
                 (fn [row]
                   (and (= (:year row) 2025)
                        (> (:have-count row) 400)
                        (= "Germany" (:country row))))))

For USA:

(trends/plot-trends
 (tc/select-rows @trends/trends-ds
                 (fn [row]
                   (and (= (:year row) 2025)
                        (> (:have-count row) 900)
                        (= "United States of America" (:country row))))))

Which exposes the typical IT conundrum that sees fun techonology as the least in demand (by employers) and the most adopted technology among the least desirable (by developers).

The Pay Gap

Her is how the surveys distribute incomes across the globe:

(trends/plot-survey-geo-distribution
 (trends/join-so-data-with-centroids
  (trends/extract-country-overview (trends/tech-survey-path))))

Implementation details

StackOverflow's data covers a large number of countries and it looks different from region to region. For this reason the indices calculated by the app are limited to the area where the user looks for job opportunities. For each skill that is recognised in the course a number of indices are calculated. Eventually those indices are compounded (averaged) for the course.

The calculated indexed are:

  • desirability (appeal)
  • use in actual job setting (adoption)
  • expected salary or, rather, the median salary of people using the same skill professionally

Architecture diagrams

Odd looking boxes connected by squiggly lines

Data flow

Although the data comes from disparate sources, it is all ingested in DuckDB tables for easy access.

pipeline-diagram
graph LR subgraph Sources[External Data Sources] K[Kaggle] HF[Hugging Face] SO[StackOverflow] SM[SimpleMaps] end subgraph DuckDB[DuckDB Storage] T_Jobs[(Jobs Table)] T_Courses[(Courses Table)] T_Stats[(SO Stats Table)] T_Cities[(Cities Table)] end subgraph StoredEmbeddings[Pre-computed Vector Embeddings] E_Jobs[Job Embeddings] E_Courses[Course Embeddings] end subgraph External[Runtime Inputs] Files[/External CV Files/] UI_Coords[/UI Coordinates/] end subgraph Dynamic[On-the-Fly Processing] E_CVs[CV Embedding Engine] Map_Country[Coord-to-Country Lookup] end K --> T_Jobs K --> T_Courses HF -.-> T_Jobs SO --> T_Stats SM --> T_Cities T_Cities -. Enrichment .-> T_Jobs T_Jobs --> E_Jobs T_Courses --> E_Courses Files --> E_CVs UI_Coords --> Map_Country T_Cities --> Map_Country Map_Country -. Country Query .-> T_Stats classDef db fill:#fff3e0,stroke:#f57c00; classDef embed fill:#e8eaf6,stroke:#3f51b5; classDef ext fill:#fffde7,stroke:#fbc02d; classDef dyn fill:#ede7f6,stroke:#7e57c2; classDef optional fill:#f5f5f5,stroke:#9e9e9e,stroke-dasharray:4; classDef default stroke-width:3px,stroke:#333; linkStyle default stroke-width:2px; class DuckDB db; class StoredEmbeddings embed; class External ext; class Dynamic dyn; class HF optional;

User Interface

How the app should behave, when it behaves.

ui-diagram
graph TD subgraph App[Application UI] subgraph Pane1[Pane 1: CV Input] CV_In[Enter / Upload CV] end subgraph Pane2[Pane 2: Job Querying] Job_Q[Query Job Offers] Job_List[Display Matching Jobs] end subgraph Pane3[Pane 3: Course Matching] Course_List[Relevant Courses & Tech Stats] end end subgraph Engine[Backend & Embeddings] Match_Jobs[CV <--> Job Vector Match] Match_Courses[Job + CV <--> Course Vector Match] end CV_In --> Match_Jobs Job_Q --> Match_Jobs Match_Jobs --> Job_List Job_List --> Match_Courses CV_In --> Match_Courses Match_Courses --> Course_List style App fill:#f5f5f5,stroke:#616161,stroke-width:1px style Pane1 fill:#e1f5fe,stroke:#0288d1 style Pane2 fill:#e8f5e9,stroke:#388e3c style Pane3 fill:#f3e5f5,stroke:#ab47bc classDef default stroke-width:3px,stroke:#333 linkStyle default stroke-width:2px;

EOF

source: notebooks/notebook.clj